与位置1匹配的Solr建议者建议应该高于位置2

时间:2017-12-07 11:22:57

标签: solr autosuggest

我使用的是Solr 7.1,我试图创建一个Solr建议器,它会建议品牌名称。对于存在多个单词的品牌名称,这也应该有效。要求是品牌名称中的单词位置很重要。如果它接近建议的开头,那么"得分"应该更高。还有一个额外的重量"也将某些品牌名称评分更高。

品牌

  • Dutch Foo
  • Foo Tech(重量:2)
  • Foo Inc
  • American Foo
  • Foobar的

搜索" foo"应该产生这些建议:

  1. Foo Tech
  2. Foo Inc
  3. Foobar的
  4. American Foo
  5. Dutch Foo
  6. Foo 位于第2位的品牌名称得分较低。由于额外的重量, Foo Tech 得分最高。

    我的设置(我在多台计算机上尝试过)并不能保持一致。在一个系统上,经过多次尝试,我确实得到了正确的结果,但我不明白为什么......

    我配置了searchComponent

    <searchComponent name="suggest" class="solr.SuggestComponent">
        <lst name="suggester">
            <str name="name">brandNameSuggester</str>
            <str name="lookupImpl">BlendedInfixLookupFactory</str>
            <str name="dictionaryImpl">DocumentDictionaryFactory</str>
            <str name="field">brandName</str>
            <str name="weightField">weight</str>
            <str name="payloadField">id</str> <!-- here for testing purposes -->
            <str name="suggestAnalyzerFieldType">brandNameSuggest</str>
            <str name="buildOnStartup">false</str>
        </lst>
    </searchComponent>
    

    我使用它BlendedInfixLookupFactory的能力来看待这个位置。

    字段类型brandNameSuggest很简单,定义如下:

    <fieldType name="brandNameSuggest" class="solr.TextField">
        <analyzer>
             <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>
    

    字段brandName是这样的:

    <field name="brandName" type="string" indexed="true" stored="true"/>
    

    我这样查询:

    http://127.0.0.1:8983/solr/mycore/suggest?suggest.dictionary=brandNameSuggester&suggest.build=true&suggest.q=foo

    更改dictionaryImpl

    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    

    要:

    <str name="dictionaryImpl">HighFrequencyDictionaryFactory</str>
    

    是否有效(我不确定为什么)。但是weightField被忽视了。我不想要那个。

    任何提示如何使这项工作?我需要位置和重量场。

0 个答案:

没有答案