Mój plik scheme.xlm wygląda następująco:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<!-- The searched field -->
<field name="product_name" type="text" indexed="true" stored="true"/>
Powinno to zindeksować pole małymi literami, a także przekształcić zapytanie wyszukiwania na małe litery.
Dane, które chcę znaleźć, to: "Nokia Lumia 610"
Kiedy szukam "nokia", otrzymuję oczekiwany wynik, ale podczas wyszukiwania tylko "Nokia" (wielkie litery N) nie ma żadnych wyników.
Powyższy "analizator" wykonuje małe litery tylko w indeksie, ale nie w zapytaniu.
Czy to błąd? Jak zmusić indeksy SOLR i zapytanie do wyszukiwania małymi literami?
Odpowiedzi:
3 dla odpowiedzi № 1Przekształcenie zapytania wyszukiwania również zależyna typ zapytania i analizator, którego używasz. Na przykład powyższe nie zamieni twojego zapytania na małe, jeśli wysyłasz żądanie do analizatora select. Jeśli wysyłasz prośbę: -
http://url/solr/select?q=Nokia
to powyższe nie zostanie zamienione na małe, ponieważ wybrany analizator nie jest obecny w twojej definicji typu pola. Będziesz musiał zmodyfikować swój kod w następujący sposób:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="select">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
jeśli powyższe nie działa, prosimy o przesłanie żądania, które wysyłasz, oraz o wynik dodania debugQuery = true do żądania.
0 dla odpowiedzi nr 2
Wraz z
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="select">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
w pliku schema.xml.
Zmiana head.vm return $ ("# q"). val (); do return $ ("# q"). val (). toLowerCase (); dla funkcji autouzupełniania InCaseSensitive. Aby uzyskać wyniki, jeśli przeszukujesz literami Capital.