Solr 4.10 - 建议者不使用多值字段

时间:2015-07-03 09:58:58

标签: solr autocomplete multivalue search-suggestion

大家好我正在使用solr 4.10,我没有按照我的期望得到结果。我想使用discountCatName,discountSubName和vendorName这样的多个字段获取自动完成建议。我有一个创建的多值字段“建议”使用copyfield并使用该字段进行搜索建议配置。

注意:discountSubName& discountCatName再次是多值字段,vendorName是字符串。 这是我的一份文件中的建议字段数据:

"suggestions": [ 
  "Budget Car Rental", 
  "Car Rentals", 
  "Business Deals", 
  "Auto", 
  "Travel", 
  "Car Rentals" ]

如果我输入“汽车”,我会在我的建议中获得“预算租车”而不是“租车”,下面是我的配置。让我知道我是否需要更改标记器和过滤器。任何帮助都将是欣赏。

下面是我的代码块,按照上面的方案解释。

我分别用于自动完成建议的建议字段,fieldType,searchComponent和请求处理程序

<!--suggestion field -->
<field name="suggestions" type="suggestType" indexed="true" stored="true" multiValued="true"/>
<copyField source="discountCatName" dest="suggestions"/>
<copyField source="discountSubName" dest="suggestions"/>
<copyField source="vendorName" dest="suggestions"/>
<!--suggest fieldType -->

<fieldType name="suggestType" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[^a-zA-Z0-9]" replacement=" " />
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.RemoveDuplicatesTokenFilterFactory" />
  </analyzer>
</fieldType>

<!--suggest searchComponent configuration -->
<searchComponent name="suggest" class="solr.SuggestComponent">
  <lst name="suggester">
    <str name="name">analyzing</str>
    <str name="lookupImpl">BlendedInfixLookupFactory</str>
    <str name="suggestAnalyzerFieldType">suggestType</str>
    <str name="blenderType">linear</str>
    <str name="minPrefixChars">1</str>
    <str name="doHighlight">false</str>
    <str name="weightField">score</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">suggestions</str>
    <str name="buildOnStartup">true</str>
    <str name="buildOnCommit">true</str>
  </lst>
</searchComponent>

<!--suggest request handler -->
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy" >
  <lst name="defaults">
    <str name="suggest">true</str>
    <str name="suggest.count">10</str>
    <str name="suggest.dictionary">analyzing</str>
  </lst>
  <arr name="components">
    <str>suggest</str>
  </arr>
</requestHandler>

1 个答案:

答案 0 :(得分:0)

我刚刚通过调试Solr 4.10源代码发现DocumentDictionaryFactory查找中存在一个错误,它总是查看多值字段的第一个字符串,然后从该文档中停止建议,因此我没有从上面得到预期的输出组态。

我为我想要应用搜索的所有字段创建了一个单独的索引,如catName0 ... catName10,subName0 ... subName10,然后为每个字段创建了多个建议字典,最后我解析了所有建议的响应形式字典合并它们并根据重量和突出位置进行排序。

冗长的方法,但没有其他办法,因为这个solr 4.10是必需的。