2015-02-27 24 views
6

Wprowadzam usługę wyszukiwania z SOLR 4.10 i chciałbym zapewnić sugestie wyszukiwania na podstawie okreś lonego ję zyka. Dość standardowa funkcja dla aplikacji wyszukujących dzisiejszym ...Sprawdź, czy wyszukiwarka SOLR nie jest wrażliwa, ale zwróc oryginalnĘ ... obudowę.

Co chcę jest, że SOLR przeszukuje przypadek niewrażliwe na sugestie ALE powrócić oryginalnego pudełka ciąg, który nie wydaje się być możliwe ... wyszukiwania: abc zwrot: abcdefg

Kiedy używam "LowerCaseFilterFactory" wyszukiwanie nie uwzględnia wielkości liter, ale zwracane sugestie są pisane małymi literami. Kiedy usunąć go zwracane sugestie są oryginalne, ale wyszukiwanie nie uwzględnia wielkości liter .... =/

dodałem ten program obsługi żądania i komponentu wyszukiwania do mojego solrconfig.xml:

<requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler"> 
    <lst name="defaults"> 
     <str name="echoParams">none</str> 
     <str name="wt">json</str> 
     <str name="indent">false</str> 
     <str name="spellcheck">true</str> 
     <str name="spellcheck.dictionary">_all</str> 
     <str name="spellcheck.onlyMorePopular">false</str> 
     <str name="spellcheck.count">20</str> 
     <str name="spellcheck.collate">false</str> 
    </lst> 
    <arr name="components"> 
     <str>suggest</str> 
    </arr> 
</requestHandler> 

<searchComponent name="suggest" class="solr.SpellCheckComponent" > 
    <lst name="spellchecker"> 
     <str name="name">_all</str> 
     <str name="classname">org.apache.solr.spelling.suggest.Suggester</str> 
     <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.FSTLookupFactory</str> 
     <str name="field">_all</str> 
     <float name="threshold">0.</float> 
     <str name="buildOnCommit">true</str> 
    </lst> 

I dodaje to do mojego schema.xml

<fields> 
    <field name="_all" type="string" indexed="true" stored="false" multiValued="true" omitNorms="true" /> 
</fields> 
<types> 
    <fieldType name="string" class="solr.TextField"> 
     <analyzer> 
      <tokenizer class="solr.KeywordTokenizerFactory" /> 
      <filter class="solr.LowerCaseFilterFactory" /> 
      <filter class="solr.TrimFilterFactory" /> 
     </analyzer> 
    </fieldType> 
</types> 
+0

Czy masz jakieś wieści tutaj? – dtrunk

Odpowiedz

0

myślę, że jeśli ustawić atrybut „stored” true na polach chcesz oryginalna wartość zwracana i re-index to będzie rozwiązać problem.

Jeśli atrybut indeksu ma wartość true w polu Solr, przechowuje tylko tokeny, które pobiera z analizy dokumentu w swoim indeksie. Więc twój indeks Solr zawiera tylko tokenów niewrażliwych na wielkość wziętą z twoich dokumentów. Jeśli przechowywany jest również ustawiony na true, to zapisuje oryginalny termin gdzieś w indeksie, który tworzy, dzięki czemu może zwrócić go podczas wyszukiwania.

Więcej informacji o indeksowanej vs. przechowywanych można znaleźć tutaj: Link

+0

Cześć Nathan, SpellCheckComponent pracuje nad indeksem, a nie w sklepie! Więcej informacji na temat SpellCheckComponent można znaleźć tutaj: https://wiki.apache.org/solr/SpellCheckComponent – TekTimmy