2012-09-25 17 views
6

Ich möchte Solr verwenden, um eine Autosuggestion Drop-Down für ein Suchfeld zu erstellen, aber ich bleibe stecken bei dem Versuch, Vorschläge für eine Phrase zu bekommen. Wenn ich nach "Hund t" suche, möchte ich ein Ergebnisset erhalten, das Sätze wie "Hundegeschmack", "Hundeknacker", "Erkennungsmarken" enthält, aber stattdessen bekomme ich 2 Ergebnissätze, einen für "Hund" "(wie "Hunde" "Hundeknochen" "Hündchen", ...) und eine andere für "t"(wie "Baum" "Zeit" ...)bekommen solr Autosuggest Ergebnisse für Ausdruck

Meine Abfrage url ist:

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

und mein Request-Handler wird in solrconfig definiert als ...

<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> 

der Feldtyp von "vorschlagen" im Schema als

0 definiert ist
<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> 

Antwort

6

fand ich 2 Lösungen für mein Problem ...

One ist einen benutzerdefinierten queryHandler zu erstellen, die sie trennen nicht die Parameter q in mehrere Worte.

Die andere Option, die ich gewählt haben, ist der Parameter spellcheck.q statt q zu verwenden. Ich benutzte Solr 3.4.0 und benutze spellcheck.q gab mir einen 500 Fehler. Ich habe Solr auf 3.6.1 aktualisiert und es scheint jetzt richtig zu funktionieren.

2

SOLR bietet suggesters wie FST (Vorschläge vom Anfang des Feldes), AnalyzingInfix, die wir intelligente Phrase/Wort Autosuggestionen zu erzeugen, nutzen können. Lesen Sie diesen Artikel, um mehr über die Implementierung zu erfahren http://lucidworks.com/blog/solr-suggester/

Verwandte Themen