0

アプリケーションの検索エンジンとして SOLR を使用しています。しかし、現在、適切な結果が表示されていません。

私のスキーマ ファイルにはSubscriptionIds、区切り記号で複数の値を保持する列があります。それらは、,,4588,,4585,,6966,,4855 として保存されます。

同様にABCId、単一の値 SKJJ54855 を保持する別の列があります。

クエリを起動すると:

ABCId:(SKJJ54855)

値が ,,4588,,4585,,6966,,4855 のサブスクリプションを持つレコードが表示されます。

しかし、クエリを起動すると:

SubscriptionIds: (,4855,) && ABCId:(SKJJ54855)

それは私に結果をもたらしません!!!.

クエリを起動すると、もう 1 つのケース: SubscriptionIds: (,6966,) && ABCId:(SKJJ54855)

結果が得られます...ご参考までに、(,6966,) は SubscriptionIds リストの最後から 2 番目に配置されています。

なぜそれはとても奇妙な動作をしているのですか.!!!

私の Schema.xml ファイルの一部。

    <fieldType name="textgen" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords.txt"
                enablePositionIncrements="true"
                />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

<field name="SubscriptionIds" type="textgen" indexed="true" stored="true" />



<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
<field name="ABCId" type="string" indexed="true" stored="true"/>
4

1 に答える 1

2

私の提案は、フィールドSubscriptionIdsを多値にし、多くの ID を別々に保存することです。これは、コンマ区切りのリストよりも実際のデータをよりよく表しています。次のように変更します。

<field name="SubscriptionIds" type="int" indexed="true" stored="true" multiValued="true" />

インデックス コードを変更して、SubscriptionIds フィールドに複数の ID を追加します。

于 2012-05-28T07:51:38.553 に答える