Sicher, das kann getan werden. einrichten nur zwei Suchkomponenten etwas wie folgt aus:
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">suggest_cars</str>
<str name="lookupImpl">BlendedInfixLookupFactory</str>
<str name="blenderType">linear</str>
<str name="dictionaryimpl">DocumentDictionaryFactory</str>
<str name="field">cars_suggest</str>
<str name="weightField">popularity</str>
<str name="suggestAnalyzerFieldType">text_suggest</str>
<str name="queryAnalyzerFieldType">phrase_suggest</str>
<str name="indexPath">cars_suggest</str>
<str name="buildOnStartup">false</str>
<str name="buildOnCommit">false</str>
<bool name="exactMatchFirst">true</bool>
</lst>
<lst name="suggester">
<str name="name">suggest_all</str>
<str name="lookupImpl">BlendedInfixLookupFactory</str>
<str name="blenderType">linear</str>
<str name="dictionaryimpl">DocumentDictionaryFactory</str>
<str name="field">suggest</str>
<str name="weightField">popularity</str>
<str name="suggestAnalyzerFieldType">text_suggest</str>
<str name="queryAnalyzerFieldType">phrase_suggest</str>
<str name="indexPath">all_suggest</str>
<str name="buildOnStartup">false</str>
<str name="buildOnCommit">false</str>
<bool name="exactMatchFirst">true</bool>
</lst>
dann einen Request-Handler erstellen:
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="echoParams">all</str>
<str name="wt">json</str>
<str name="indent">false</str>
<str name="suggest">true</str>
<str name="suggest.count">10</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
In der schema.xml Datei, diese beiden Feldtypen:
<fieldType name="phrase_suggest" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="text_suggest" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
</analyzer>
</fieldType>
Und Natürlich benötigen Sie die beiden Felder cars_suggest und all_suggest, die Vorschläge für Autos bzw. Autos/DVDs enthalten, mit Feldtyp phrase_suggest (dh mit einem Stichwort-Tokenizer).
Die Abfrage erfolgt wie folgt:
http://localhost:8983/solr/collection0/suggest?q=peug&suggest.dictionary=suggest_cars
Das ist genial. Es funktionierte! Vielen Dank James :) Obwohl ich verschiedene Konfigurationen für Wörterbuch und Filter gemacht habe, weil die Ansicht und das Aussehen für mich nicht optimal waren. Aber die Funktionalität tut genau das, was ich brauchte :) – middleendian
danke James, Für alle newbees ist der Haken hier ein anderer Indexpfad für zwei verschiedene Felder, im Datenverzeichnis werden Ordner mit dem gleichen Namen angelegt, egal was gegen indexpath.if angegeben wird verwendet dann für die zweite Komponente solr wird nicht die erforderlichen Dateien bcz von write.lock erstellen –