1

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」を含む単語を優先する方法を知りたいです。たとえば、リストでは "White Knight" が 1 位 (その名前で見つかったアイテムの数が多かったためだと思います) で、"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" で始まらないが含まれるフレーズを表示します。句の中のその言葉。

助言がありますか?

4

0 に答える 0