我看过关于跨多个字段执行自动完成但没有在多值字段上执行自动完成的帖子。
我的自动完成功能适用于非多值字段。
我的问题是,当我在多值字段上运行查询时,只要文档与该查询匹配,则该文档的多值字段中的所有字段都会在构面结果中返回。
下面是我的架构,类似于 Solr 4 Cookbook 中提出的架构。
<fieldType name="text_autocomplete" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="publisherText-str" type="string" indexed="true" stored="false" multiValued="true"/>
<field name="publisherText-ac" type="text_autocomplete" indexed="true" stored="true" required="false" multiValued="true"/>
如您所见,publisherText 是一个多值字段。我执行这样的查询来测试自动完成功能:
/select?q=publisherText-ac:new&facet=true&facet.field=publisherText-str&facet.mincount=1&rows=0
查询是“新的”,它匹配一组文档。但是,构面结果集包含每个匹配文档的其他 publisherText 值(包含在多值字段中)。
更新:查询“new”时,结果集应包括“New York Times”和“Times New Roman”但不需要解决中缀问题:“Knewton Gazette”不需要在结果集中。
有没有办法让构面结果只包含与查询匹配的值?或者是否有不同的(更好的?)方式来支持更优雅地处理多值字段的完整自动完成功能?
谢谢。