2016-11-08 155 views
0

任何人都可以建议我使用索尔的最佳方式,我的产品定期搜索,也应支持同义词&模糊搜索吗?索尔索引与搜索

想,如果我有一句话CRO搜索,我需要的产品的任何地方开始结痂,然后痂出现在场上,然后同义词&然后在其上的模糊在相应的提高

回答

0

我有我的项目的情况。

我使用一起FuzzyLookupFactory(具有多个建议者)和AnalyzingInfixLookupFactory。我正在使用solrj(java api)进行请求查询。

首先我搜索词与analyzeinfixlookupfactory这可以找到字在字段中的任何地方,但你必须正确输入。例如产品名称“东芝”如果你搜索“胡说”它可以找到“东芝”正确,但是如果你搜索“TOSHBA”它不会找到任何产品。

这次我使用fuzzylookupfactory建议我拆分所有单词(例如,你有“东芝笔记本电脑”word1 =东芝word2 =笔记本电脑等),并一对一搜索和模糊将找到TOSBA - >东芝,找到东芝后再次使用analyzeinfixlookupfactory查找完整的产品字段。

比如你要找到“东芝笔记本电脑”,然后搜索“TOSHBA laptp”。首先尝试“analyzeinfixlookupfactory”并且响应将为空。响应null搜索模糊每个单词并添加你发现的东西像toshba - > toshiba + laptp-> laptop它将toshiba笔记本电脑,现在你可以再次搜索analyzeinfixlookupfactory完整的字段。

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

我模糊的建议者在(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> 

我的托管架构字段

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