全文検索にSolr3.6.0を使用しています。schema.xmlで次のフィールドを定義しています。
<field name="productNumber" type="ngramtext" indexed="true" stored="true" required="true" />
<field name="additionalTextData" type="text_en" indexed="true" stored="true"/>
次のフィールドタイプも定義しています。
<fieldType name="ngramtext" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="3" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
これにより、サイズ2および3のトークンが作成され、インデックスに配置されます。SKUの検索に最適です。今のところ、それらは同じインデックスにあり、これがパフォーマンスの問題を引き起こす可能性があることを私は知っています。しかし、パフォーマンスの問題が発生したときに対処することにしました。私が今持っているデータセットの場合、速度は素晴らしいです(主観的に言えば:))
私も次のものを持っています:
<uniqueKey>productNumber</uniqueKey>
solrconfig.xmlで、すべての「df」部分にadditionalTextDataを配置しました。
="df">="df">additionalTextData<
次のクエリを実行すると、次のようになります。
select?indent = on&version = 2.2&q = productNumber:12&fq =&start = 0&rows = 10000&fl = productNumber、additionalTextData&wt = json&explainOther&hl.fl
また
select?indent = on&version = 2.2&q = productNumber:12&fq = additionalTextData:*&start = 0&rows = 10000&fl = productNumber、additionalTextData&wt = json&explainOther&hl.fl
2345の結果が得られ、そのうちのいくつかが繰り返されます。productNumberで検索すると、2〜3回表示されます。なぜこれが起こるのですか?そして、どうすればこれを克服できますか?
編集1:
私はまた、追加することを知りました:
<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
他のすべてのフィルターの後のngramtextfieldTypeでは、問題は解決しません。
mbonaciによるSOLUTION1:
代わりに:
<field name="productNumber" type="ngramtext" indexed="true" stored="true" required="true" />
場所:
<field name="productNumber" type="string" indexed="true" stored="true" required="true" />
<field name="productNumberCopyField" type="ngramtext" indexed="true" stored="true" required="true" />
fieldsタグの後に、次を追加します。
<copyField source="productNumber" dest="productNumberCopyField" />
そして、次のクエリを指定します。
select?indent = on&version = 2.2&q = productNumberCopyField:12&fq = additionalTextData:*&start = 0&rows = 10000&fl = productNumber、additionalTextData&wt = json&explainOther&hl.fl