如何在Solr中创建相关的自动完成?

时间:2013-10-21 12:22:35

标签: solr autocomplete

schema.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构建的自动完成。我想知道如何优先考虑包含“骑士”作为第一个单词的单词。 例如,列表中的“白骑士”是第一个(我认为因为它获得了大量使用该名称找到的物品),而“Knight Errant”则是第3名。这种方式不是一个非常好的自动完成解决方案。

我正在使用的查询是:

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”开头的那些“但在短语中包含了这个词。

有什么建议吗?

0 个答案:

没有答案