2012-09-25 30 views
6

Chcę użyć solr, aby utworzyć rozwijanie autosugestii dla pola wyszukiwania, ale utknąłem podczas próby uzyskania sugestii dla frazy. Kiedy szukam "psa t", chcę uzyskać jeden zestaw wyników zawierający frazy, takie jak "psiarnia", "psia sztuczka", "nieśmiertelniki", ... ale zamiast tego otrzymuję 2 zestawy wyników, jeden dla "psa" "(takie jak "psy", "kości dla psa" "pieska" ...), a inny dla "T"(takich jak "drzewo", "czas" ...)get solr autosuggest wyniki dla frazy

mój adres URL zapytania jest:

http://localhost:8985/solr/mycollection/suggest?q=%22dog%20t%22&wt=json 

i moja prośba obsługi jest zdefiniowana w solrconfig jako ...

<searchComponent class="solr.SpellCheckComponent" name="suggest"> 
    <lst name="spellchecker"> 
     <str name="name">suggest</str> 
     <str name="classname">org.apache.solr.spelling.suggest.Suggester</str> 
     <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str> 
     <str name="field">suggest</str> <!-- the indexed field to derive suggestions from --> 
     <float name="threshold">0.0001</float> 
     <str name="buildOnCommit">true</str> 
    </lst> 
<str name="queryAnalyzerFieldType">textSuggest</str> 
    </searchComponent> 

    <requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest"> 
    <lst name="defaults"> 
     <str name="spellcheck">true</str> 
     <str name="spellcheck.dictionary">suggest</str> 
     <str name="spellcheck.onlyMorePopular">true</str> 
     <str name="spellcheck.count">10</str> 
    </lst> 
    <arr name="components"> 
     <str>suggest</str> 
    </arr> 
    </requestHandler> 

FieldType z „sugerować” jest zdefiniowany w schemacie jako

<fieldType name="textSuggest" class="solr.TextField" positionIncrementGap="100" > 
     <analyzer type="index"> 
<tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
<filter class="solr.ShingleFilterFactory" maxShingleSize="3" outputUnigrams="true" /> 
<filter class="solr.WordDelimiterFilterFactory" 
       generateWordParts="1" 
       generateNumberParts="1" 
       catenateWords="0" 
       catenateNumbers="0" 
       catenateAll="0" 
       preserveOriginal="1" splitOnCaseChange="1" 
       /> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
    </fieldType> 

Odpowiedz

6

znalazłem 2 rozwiązania mojego problemu ...

Jednym z nich jest stworzenie własnego queryHandler że nie dzieli się parametr q do wielu słów.

Innym rozwiązaniem, które chciał, jest użycie spellcheck.q parametrem, q. Używałem Solr 3.4.0 i używanie spellcheck.q dało mi błąd 500. Zaktualizowałem Solr do wersji 3.6.1 i wygląda na to, że działa teraz poprawnie.

2

SOLR zapewnia suggesters jak FST (propozycje od początku pola), AnalyzingInfix której możemy dźwigni w celu wygenerowania inteligentne Automatyczne sugestie zdanie/słowo. Przeczytaj ten artykuł, aby dowiedzieć się więcej o implementacji http://lucidworks.com/blog/solr-suggester/