Mam kolekcję Solr, która nie zwraca wyników dla kilku znaków spoza zestawu ASCII. Przykładem, którego używamy, jest ciąg znaków S11. • “≡ «Ñaïvétý» ‘¢¥£’ ¶!#%
; szukanie całego ciągu nie zwraca żadnych wyników, mimo że mam obiekt z tym w indeksowanym polu. Jednakże wyszukiwanie podciągów tego łańcucha zwraca wyniki. Jedyne znaki, które powodują, że Solr nie zwraca żadnych dopasowań, to trzy w środku: • “≡
. Pole zostało zindeksowane jako text_en
, ale wypróbowałem też edge_ngram
(mając nadzieję na odrobinę magii Cargo Cult, aby rozwiązać problem). Czy jest coś wyjątkowego w tych trzech postaciach, czy też muszę zmodyfikować sposób, w jaki Solr indeksuje pola?Wyszukiwanie Solr Uszkodzenie niektórych znaków
Szukamy poprzez django-haystack, ale problem pojawia się także w panelu administratora Solr.
Oto definicje typów dwa pola:
<fieldType name="edge_ngram" class="solr.TextField" positionIncrementGap="1">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1" catenateWords="0"
catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.EdgeNGramFilterFactory"
minGramSize="2" maxGramSize="50" side="front" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1" catenateWords="0"
catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
</analyzer>
</fieldType>
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="lang/stopwords_en.txt"
enablePositionIncrements="true"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="lang/stopwords_en.txt"
enablePositionIncrements="true"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
Czy sprawdzić czy wykroje wykroje są naprawdę? Istnieje kilka znaków, które wyglądają jak spacje, ale nimi nie są. Jednym z przykładów jest "[Non-breaking space]" (https://en.wikipedia.org/wiki/Nonbreakbreak_space) ". Mogą one ulec zniekształceniu podczas kopiowania i wklejania. – cheffe
Ostatnie pytanie :) w jaki sposób fieldTypes 'text_en' i' edge_ngram' są zdefiniowane w twoim schemacie? Czy podzieliłbyś się nimi? Następnie możemy spróbować odtworzyć problem. – cheffe
@cheffe - dodano definicje pól. Zastanawiam się również nad białymi znakami, ale o ile wiem, są to zwykłe postacie kosmiczne. Solr nie ma problemu z dzieleniem zapytania na "słowa" na tych polach, podobnie jak inne przestrzenie, gdy patrzę na zapytanie w panelu administracyjnym. – Tom