架构.xml
<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="itemName" type="text_general" indexed="true" stored="true" required="true" />
<field name="itemNameAutocomplete" type="text_autocomplete" indexed="true" stored="false" />
<field name="itemNameShow" type="string" indexed="true" stored="false" />
<copyField source="itemName" dest="itemNameAutocomplete"/>
<copyField source="itemName" dest="itemNameShow"/>
http://oi40.tinypic.com/21azfao.jpg
以上是我的 schema.xml 定义,图像用于我尝试使用 Solr 构建的自动完成功能。我想知道如何优先考虑包含“骑士”作为第一个单词的单词。例如,在列表中,“白骑士”排在第一位(我认为是因为它在使用该名称的物品中得分较多),而“游侠骑士”排在第三位。这种方式不是一个很好的自动完成解决方案。
我正在使用的查询是:
http://localhost:8983/solr/select?q=itemNameAutocomplete:"knight"&q.op=AND&rows=0&facet=true&facet.field=itemNameShow&facet.mincount=1&facet.limit=500&wt=json
应该工作的方式是首先显示“Knight Errant”,然后是“Knight Exemplar”等等(所有以“knight”开头的短语),然后才显示那些不以“knight”开头但包含短语中的那个词。
有什么建议么?