我正在尝试使用Solr 7.2中的contextField进行过滤。在solrconfig.xml中,我具有以下内容:
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">suggest_artist</str>
<str name="lookupImpl">BlendedInfixLookupFactory</str>
<str name="dictionaryimpl">DocumentDictionaryFactory</str>
<str name="field">artist</str>
<str name="weightField">monthly_dlds</str>
<str name="contextField">territory</str>
<str name="queryAnalyzerFieldType">phrase_suggest</str>
<str name="suggestAnalyzerFieldType">text_suggest</str>
<str name="buildOnStartup">true</str>
<str name="buildOnCommit">true</str>
<str name="storeDir">suggest_a</str>
<str name="indexPath">suggest_a</str>
<str name="highlight">false</str>
</lst>
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="echoParams">all</str>
<str name="wt">json</str>
<str name="indent">true</str>
<str name="suggest">true</str>
<str name="suggest.count">10</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
在我的架构中,领域字段配置如下:
<field name="territory" type="string" indexed="true" stored="true" multiValued="true"/>
“地域”字段是多值的,包含区域(['US','CA'等)。
我按如下方式运行建议查询:
我得到的答复没有任何建议。
{
"responseHeader":{
"zkConnected":true,
"status":0,
"QTime":0,
"params":{
"echoParams":"all",
"indent":"true",
"suggest.q":"m",
"suggest.count":"10",
"suggest":"true",
"suggest.dictionary":"suggest_artist",
"wt":"json",
"suggest.cfq":"US"}},
"suggest":{"suggest_artist":{
"m":{
"numFound":0,
"suggestions":[]}}}}
我没有得到建议列表(我已经检查了一些建议(通过检查fq = territory:US是否应该返回某些项目))。我尝试过使用单值字段,同时使用布尔值(例如:us_terr:true)和字符串字段类型(us_terr:“ t”),结果是相同的。建议者位于SolrCloud上自己的单独集合中,只有一个分片。
答案 0 :(得分:0)
问题是字典Impl拼写错误。
<str name="dictionaryimpl">DocumentDictionaryFactory</str>
应为:
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
这意味着它正在使用默认的字典实现HighFrequencyDictionaryFactory,它不支持上下文过滤。