2016-11-08 3 views
0

Konnte mir jemand die beste Weise vorschlagen, solr für meine regelmäßige Suche nach meinen Produkten zu verwenden und es sollte auch Synonyme & unscharfe Suche auch stützen?Solr Indexing & Searching

nehme an, wenn ich mit Wort cro suchen, ich brauche Produkte mit cro starten, dann überall cro Vorkommen auf dem Feld, dann Synonyme & dann unscharf auf sie in der jeweiligen

Steigerung

Antwort

0

Ich habe ein Szenario für mein Projekt.

ich bin mit zusammen FuzzyLookupFactory (mit mehreren suggester) und AnalyzingInfixLookupFactory. Ich benutze Solrj (Java API) für Anfrage Abfrage.

zuerst suche ich wort mit analysinginfixlookupfactory das könnte wort irgendwo im feld finden, aber sie müssen richtig eingeben. zum Beispiel Produktnamen „toshiba“, wenn Sie nach „tosh“ es „toshiba“ richtig finden kann, aber wenn Sie suchen „toshba“ es wird kein Produkt finden.

dieses mal ich benutze fuzzylookupupfactory suggester ich spalte alle worte (zum beispiel hast du "toshiba laptop" word1 = toshiba word2 = laptop etc.) und suche eins zu eins und fuzzy finden tosha -> toshiba und nach finden toshiba Verwenden Sie erneut analysinginfixlookupfactory, um das vollständige Produktfeld zu finden.

zum Beispiel möchten, dass Sie "toshiba Laptop" zu finden und Sie haben gesucht " toshba laptp". erste Versuch "analysinginfixlookupfactory" und Antwort wird null sein. Nach Antwort null Suche fuzzy für jedes Wort und fügen Sie hinzu, was Sie wie Toshba finden -> Toshiba + laptp-> Laptop wird es Toshiba Laptop und jetzt können Sie wieder suchen analysinginfixlookupfactory für komplette Feld.

meine Analyse suggester in (solrconfig.xml)

<searchComponent name="suggestAnalyzing" class="solr.SuggestComponent"> 
<lst name="suggester"> 
<str name="name">suggestAnalyzing</str> 
<str name="lookupImpl">AnalyzingInfixLookupFactory</str> 
<str name="classname">org.apache.solr.spelling.suggest.Suggester</str> 
<str name="storeDir">suggester_fuzzy_dir</str> 
<str name="indexPath">suggester_infix_dir</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">COMPLETE_FIELD</str> 
<str name="suggestAnalyzerFieldType">textgen</str> 

<float name="threshold">0.005</float> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 
</lst> 


</searchComponent> 

<requestHandler name="/suggestAnalyzing" class="solr.SearchHandler"> 
<lst name="defaults"> 
<str name="suggest.dictionary">suggestAnalyzing</str> 
<str name="suggest">true</str> 
<str name="suggest.count">10</str> 

</lst> 
<arr name="components"> 
<str>suggestAnalyzing</str> 
</arr> 
</requestHandler> 

meine Fuzzy suggester in (solrconfig.xml)

<searchComponent class="solr.SuggestComponent" name="suggest"> 

<lst name="suggester"> 
<str name="name">word1suggester</str> 
<str name="lookupImpl">FuzzyLookupFactory</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">word1</str> <!-- the indexed field to derive suggestions from --> 
<str name="suggestAnalyzerFieldType">textgen</str> 
<str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 
</lst> 

<lst name="suggester"> 
<str name="name">word2suggester</str> 
<str name="lookupImpl">FuzzyLookupFactory</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">word2</str> <!-- the indexed field to derive suggestions from --> 
<str name="suggestAnalyzerFieldType">textgen</str> 
<str name="indexPath">suggestions/word2suggester</str> 
<str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 
</lst> 

<lst name="suggester"> 
<str name="name">word3suggester</str> 
<str name="lookupImpl">FuzzyLookupFactory</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">word3</str> <!-- the indexed field to derive suggestions from --> 
<str name="suggestAnalyzerFieldType">textgen</str> 
<str name="indexPath">suggestions/word3suggester</str> 
<str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
<str name="preserveSep">true</str> 
<str name="preservePositionIncrements">true</str> 
<str name="exactMatchFirst">true</str> 
<float name="threshold">0.005</float> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 

</lst> 

<lst name="suggester"> 
<str name="name">word4suggester</str> 
<str name="lookupImpl">FuzzyLookupFactory</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">word4</str> <!-- the indexed field to derive suggestions from --> 
<str name="suggestAnalyzerFieldType">textgen</str> 
<str name="indexPath">suggestions/word4suggester</str> 
<str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
<str name="preserveSep">true</str> 
<str name="preservePositionIncrements">true</str> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 
</lst> 

<lst name="suggester"> 
<str name="name">word5suggester</str> 
<str name="lookupImpl">FuzzyLookupFactory</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">word5</str> <!-- the indexed field to derive suggestions from --> 
<str name="suggestAnalyzerFieldType">textgen</str> 
<str name="indexPath">suggestions/word5suggester</str> 
<str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
<str name="preserveSep">true</str> 
<str name="preservePositionIncrements">true</str> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 
</lst> 

<lst name="suggester"> 
<str name="name">word6suggester</str> 
<str name="lookupImpl">FuzzyLookupFactory</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">word6</str> <!-- the indexed field to derive suggestions from --> 
<str name="suggestAnalyzerFieldType">textgen</str> 
<str name="indexPath">suggestions/word6suggester</str> 
<str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
<str name="preserveSep">true</str> 
<str name="preservePositionIncrements">true</str> 
<str name="exactMatchFirst">true</str> 
<float name="threshold">0.005</float> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 
</lst> 


<lst name="suggester"> 
<str name="name">word7suggester</str> 
<str name="lookupImpl">FuzzyLookupFactory</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">word7</str> <!-- the indexed field to derive suggestions from --> 
<str name="suggestAnalyzerFieldType">textgen</str> 
<str name="indexPath">suggestions/word7suggester</str> 
<str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
<str name="preserveSep">true</str> 
<str name="preservePositionIncrements">true</str> 
<str name="exactMatchFirst">true</str> 
<float name="threshold">0.005</float> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 
</lst> 

<lst name="suggester"> 
<str name="name">word8suggester</str> 
<str name="lookupImpl">FuzzyLookupFactory</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">word8</str> <!-- the indexed field to derive suggestions from --> 
<str name="suggestAnalyzerFieldType">textgen</str> 
<str name="indexPath">suggestions/word8suggester</str> 
<str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
<str name="preserveSep">true</str> 
<str name="preservePositionIncrements">true</str> 
<str name="exactMatchFirst">true</str> 
<float name="threshold">0.005</float> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 
</lst> 


</searchComponent> 

<requestHandler class="solr.SearchHandler" name="/suggest"> 
<lst name="defaults"> 
<str name="spellcheck">true</str> 
<str name="suggest">true</str> 
<str name="suggest.dictionary">word1suggester</str> 
<str name="suggest.dictionary">word2suggester</str> 
<str name="suggest.dictionary">word3suggester</str> 
<str name="suggest.dictionary">word4suggester</str> 
<str name="suggest.dictionary">word5suggester</str> 
<str name="suggest.dictionary">word6suggester</str> 
<str name="suggest.dictionary">word7suggester</str> 
<str name="suggest.dictionary">word8suggester</str> 

<str name="spellcheck.count">10</str> 

</lst> 
<arr name="components"> 
<str>suggest</str> 
</arr> 
</requestHandler> 

meine verwalteten-Schema Felder

<fieldType name="textgen" class="solr.TextField" positionIncrementGap="100"> 
<analyzer type="index"> 
<tokenizer class="solr.WhitespaceTokenizerFactory"/> 
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/> 
<filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
<analyzer type="query"> 
<tokenizer class="solr.WhitespaceTokenizerFactory"/> 
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
<filter class="solr.StopFilterFactory" 
     ignoreCase="true" 
     words="stopwords.txt" 

     /> 
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> 
<filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 

<field name="word1" type="textgen" omitNorms="true" omitTermFreqAndPositions="true" multiValued="true" indexed="true" stored="true"/> 

<field name="COMPLETE_FIELD" type="textgen" multiValued="true" indexed="true" stored="true"/> 

<field name="word2" type="text_general" omitNorms="true" omitTermFreqAndPositions="true" multiValued="true" indexed="true" stored="true"/> 

<field name="word3" type="text_general" omitNorms="true" omitTermFreqAndPositions="true" multiValued="true" indexed="true" stored="true"/> 

<field name="word4" type="textgen" omitNorms="true" omitTermFreqAndPositions="true" multiValued="true" indexed="true" stored="true"/> 

<field name="word5" type="textgen" omitNorms="true" omitTermFreqAndPositions="true" multiValued="true" indexed="true" stored="true"/> 

<field name="word6" type="textgen" omitNorms="true" omitTermFreqAndPositions="true" multiValued="true" indexed="true" stored="true"/> 

<field name="word7" type="textgen" omitNorms="true" omitTermFreqAndPositions="true" multiValued="true" indexed="true" stored="true"/> 
<field name="word8" type="textgen" omitNorms="true" omitTermFreqAndPositions="true" multiValued="true" indexed="true" stored="true"/>