1

インデックスを作成しているキーワードフィールドに対してNGramフィルタリングを有効にしています。このフィールドには、次のカンマ区切りの用語が含まれています。

wwwdebenhams.com、ebenhams.com、dbenhams.com、deenhams.com、debnhams.com、debehams.com、debenams.com、debenhms.com、debenhas.com、debenham.com、debenhams.ocm、debenhams.con、debenhams。 comn、debenhams.copm、debenhams.comm、debenhams.coom、debenhams.xom、debenhams.cpm、ebenhams.com、dbenhams.com、deenhams.com、debnhams.com、debehams.com、debenams.com、debenhms.com、 debenhas.com、debenham.com、

コアのスキーマは次のようになります。

<?xml version="1.0" ?>

<schema name="merchant" version="1.0">
    <types>
    <!--
          Default numeric field types. For faster range queries, consider the           tint/tfloat/tlong/tdouble types.
        -->
        <fieldType name="int" class="solr.TrieIntField" precisionStep="0"     positionIncrementGap="0"/>

        <fieldType name="text_lowercase_ngram" class="solr.TextField"     termPositions="false" omitNorms="true">
        <analyzer type="index">
               <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterFilterFactory"
                    splitOnCaseChange="0"
                    splitOnNumerics="0"
                    stemEnglishPossessive="0"
                    generateWordParts="1"
                    generateNumberParts="1"
                    catenateWords="0"
                    catenateNumbers="0"
                    catenateAll="0"
                    preserveOriginal="1"
                    types="wdfftypes.txt"
                    />
            <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="20"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterFilterFactory"
                    splitOnCaseChange="0"
                    splitOnNumerics="0"
                    stemEnglishPossessive="0"
                    generateWordParts="1"
                    generateNumberParts="1"
                    catenateWords="0"
                    catenateNumbers="0"
                    catenateAll="0"
                    preserveOriginal="1"
                    types="wdfftypes.txt"
                    />
            <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="20"/>
        </analyzer>
    </fieldType>

    <fieldType name="text_exact" class="solr.TextField">
        <analyzer>
            <tokenizer class="solr.KeywordTokenizerFactory"/>
        </analyzer>
    </fieldType>
</types>

<fields>
    <!-- Merchant Fields -->
    <field name="id" type="int" indexed="true" stored="true" required="true"/>
    <field name="site_id" type="int" indexed="true" stored="true" required="true"/>
    <field name="title" type="text_lowercase_ngram" indexed="true" stored="true"/>
    <field name="url" type="text_exact" indexed="true" stored="true"/>
    <field name="keywords" type="text_lowercase_ngram" indexed="true" stored="true" />
    <field name="description" type="text_lowercase_ngram" indexed="true" stored="true" />
    <field name="type" type="int" indexed="true" stored="true"/>
    <field name="popularity" type="int" indexed="true" stored="true"/>
    <field name="category" type="text_exact" indexed="true" stored="true" multiValued="true"/>
</fields>

<!-- field to use to determine and enforce document uniqueness. -->
<uniqueKey>id</uniqueKey>

<!-- field for the QueryParser to use when an explicit fieldname is absent -->
<defaultSearchField>title</defaultSearchField>

<!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
<solrQueryParser defaultOperator="OR"/>

'deb'を検索すると、スコア6.4406505の一致するドキュメントが返されます。'debe'、'deben'、'debenh'、および'debenha'を検索しても、結果は返されません。'debenham'を検索すると、スコアが41.740173の一致するドキュメントが返され、'debenhams'がスコアが111.30711のドキュメントが返されます。

上記の各クエリに一致する用語を表示するクエリアナライザを使用してみましたが、結果に一致するドキュメントが返されません。正の一致であるかどうかに関係なく、対応するスコアを持つすべてのドキュメントを返すことができ、なぜそれらが返されないのかをよりよく理解する方法はありますか?

4

1 に答える 1

1

まず、クエリ時にNGramFilterFactoryを削除する必要があります。あなたは本当にクエリのngramを作る必要はありません、そしてそれはおそらくあなたの結果を台無しにしているものです。また、最初の10件の結果のみを表示している可能性はありますか?Solrはデフォルトのrows=10パラメーターを使用します。パラメータを使用して、ページを増やすか、ページを切り替えることができstartます。numFoundすべてが表示されていない場合でも、結果の総数が含まれているクエリで返されるものを確認してください。

于 2012-10-08T07:36:32.983 に答える