我使用的是Solr 7.1,我试图创建一个Solr建议器,它会建议品牌名称。对于存在多个单词的品牌名称,这也应该有效。要求是品牌名称中的单词位置很重要。如果它接近建议的开头,那么"得分"应该更高。还有一个额外的重量"也将某些品牌名称评分更高。
品牌
搜索" foo"应该产生这些建议:
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"/>
我这样查询:
更改dictionaryImpl
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
要:
<str name="dictionaryImpl">HighFrequencyDictionaryFactory</str>
是否有效(我不确定为什么)。但是weightField
被忽视了。我不想要那个。
任何提示如何使这项工作?我需要位置和重量场。