〜1 milの製品ドキュメントSolrインデックスがあります。また、カテゴリ、タブ、価格帯、サイズ、色、その他のフィルターなどのUIフィルターも多数あります。
Qで_(q=\*:\*)
_をすべて選択し、fqの他のすべてのフィルターを選択するのは正しい方法ですか?例:
fq=(catid:90 OR catid:81) AND priceEng:[38 TO 40] AND (size:39 OR size:40 OR size:41 OR size:50 OR size:72) AND (colorGroup:Yellow OR colorGroup:Violet OR colorGroup:Orange ... AND (companyId:81 OR companyId:691 OR companyId:671 OR companyId:628 OR companyId:185 OR companyId:602 OR ... AND endShipDays:[* TO 7])
私にとって、カテゴリからcompanyIds、色やサイズなどはすべて単なるフィルターです。このアプローチで将来の成長におけるパフォーマンスの問題はありますか?クエリのいくつかをqに入れるべきですか?
ありがとうございました、
可能な限り、通常のクエリよりもフィルタークエリを使用することをお勧めします。
FilterQuery は FilterCache を利用できます。これはクエリと比較してパフォーマンスが大幅に向上します。
決定するために、フィールドについて次の点を調べます。
#3についてのメモ:私の経験では、数秒ごとに新しいドキュメントが追加された大きなインデックスがあり、autoSoftCommitも数秒に設定されていました。ソフトコミット中に、キャッシュを無効にする新しいサーチャーが開かれました。つまり、実際に何が起こっていたか、フィルターヒット率はほとんど常に0でした。詳細はわかります。最初のフィルタークエリの実行は、すべてのフィルター条件が " fq」。たとえば、クエリが5つのフィルタークエリ(キャッシュヒットなし)で1秒かかり、すべての「fq」条件を「AND」でメインクエリに移動すると147msかかりました。しかし、もちろん、インデックスの更新を停止すると、キャッシュが使用されたため、同じフィルタークエリに0ミリ秒かかりました。したがって、これは考慮すべき事項です。
あなたの質問のための他のいくつかのポイント:
それが役に立てば幸い。
qおよびfqの使用方法。 qで全文検索を適用し、fqですべてのフィルターを適用します。あなたがフィールドを持っているとしましょうキーワードあなたのスキーマで定義されているようにフィールドで全文検索を行うことをコピーフィールドで
<copyField source="id" dest="keyword"/>
<copyField source="category" dest="keyword"/>
<copyField source="product_name" dest="keyword"/>
<copyField source="color" dest="keyword"/>
<copyField source="location" dest="keyword"/>
<copyField source="price" dest="keyword"/>
<copyField source="title" dest="keyword"/>
<copyField source="description" dest="keyword"/>
私のクエリは次のようになります
/select?q={keyword}&fq=category:fashion&fq=location:nyc
/select?q=jeans&fq=category:fashion&fq=location:nyc
Digitaljoelが示唆したように、複数のフィールドを照会する必要がある場合、ANDおよびOR with q =
注:私の場合、qデフォルトは、solrconfig.xmlで定義されているフィールドkeywordを参照します
<requestHandler name="/select" class="solr.SearchHandler">
<!-- default values for query parameters can be specified, these
will be overridden by parameters in the request
-->
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">keyword</str>
</lst>