Solr-配置建议搜索子字符串

时间:2019-03-19 08:47:01

标签: solr autocomplete search-suggestion

我正在使用solr 7.5对类别中的“ / suggester”做一些建议。用于带有solr集成的自动完成功能。

索引项目:

  • “屋顶”
  • “屋顶面板”
  • “夹心板”

预期行为

搜索:“ roo”->结果:“屋顶”和“屋顶面板”

搜索“窗格”->结果:“屋顶面板”和“夹心面板”

问题

我尝试了使用不同标记器的几种解决方案,但均未成功。

StandardTokenizer返回单个单词

KeywordTokenizer向我返回了完整的短语,但是如果我搜索“面板”->没有建议的单词,就会出现问题。会期望“夹心板”和“屋顶板”

如果我搜索“屋顶面板”,ShingleFilterFactory给我奇怪的结果->它返回“屋顶面板” /“屋顶屋顶面板” /“屋顶夹心面板”

最新配置

Solr文件:

"autosuggest_en":["Roof Panels",
      "Sandwich Panels",
      "Roof Panels",
      "Sandwich Panels"],

    "spellcheck_en":["Roof Panels",
      "Sandwich Panels",
      "Roof Panels",
      "Sandwich Panels"],

solrconfig.xml

<searchComponent name="suggest" class="solr.SpellCheckComponent">
    <str name="queryAnalyzerFieldType">text_spell</str>
    <lst name="spellchecker">
        <str name="name">default</str>
        <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
        <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
        <str name="suggestAnalyzerFieldType">text_spell</str>
        <str name="field">autosuggest</str>
        <str name="buildOnCommit">true</str>
        <str name="buildOnOptimize">true</str>
        <str name="accuracy">0.35</str>
    </lst>
</searchComponent>

schema.xml

<fieldType name="text_spell" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
            <filter class="solr.ShingleFilterFactory" maxShingleSize="10"
                    outputUnigrams="true" outputUnigramsIfNoShingles="false" tokenSeparator=" " fillerToken="_"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
            <filter class="solr.ShingleFilterFactory" maxShingleSize="10"
                    outputUnigrams="true" outputUnigramsIfNoShingles="false" tokenSeparator=" " fillerToken="_"/>
        </analyzer>
    </fieldType>

上面的解决方案使我有以下行为。 搜索:“屋顶”->结果:“屋顶”和“屋顶面板” =很好

搜索:“屋顶窗格”->结果:“屋顶面板”和“屋顶屋顶面板” =不好。不知道为什么它会重复两次“屋顶”

是否有针对预期行为的适当解决方案的建议?

谢谢!

最诚挚的问候

1 个答案:

答案 0 :(得分:0)

要检查问题,可以执行以下步骤:

  • 您应该查看您的synonyms.txt,是否有任何内容见解?如果是,请禁用该文件进行测试。

  • 在solr管理员页面上使用analysis功能来了解solr如何处理搜索字词的处理