2

Solr 3.4を実行しており、90,000ドキュメント程度の比較的小さなインデックスがあります。これらのドキュメントは複数の論理ソースに分割されているため、各検索には特定のソースに適用されるフィルタークエリがあります。例:

?q=<query>&fq=source:<source>

ここsourceで、は古典的な文字列フィールドです。edismaxを使用しており、デフォルトの検索フィールドテキストがあります。

現在q=*、実行にかかる時間は。よりも平均20倍長くなっていますq=*:*。違いは非常に顕著で、 100ミリ秒*:**最大3500ミリ秒かかります。ドキュメントセット内の一般的な単語(すべてのドキュメントのほぼ50%に一致)を検索すると、200ミリ秒未満の結果が返されます。

debugQueryがオンになっているクエリを見ると、*がに解析され、がに解析されているDisjunctionMaxQuery((text:*))こと*:*がわかりMatchAllDocsQuery(*:*)ます。これは理にかなっていますが、それでもこの規模の減速(ドキュメントの50%に一致するものよりも2000%の減速)を説明しているとは思えません。

これを引き起こしている可能性がありますか?微調整できるものはありますか?

4

1 に答える 1

2

合格するときは*、フィールド内のすべての値をチェックして照合するように命令しているだけで*、それは多くのことを行う必要があります。ただし、使用し* : *ているときは、Solrにすべてを提供し、一致するものをスキップするように求めています。

Solr / Luceneは、* : *高速かつ効率的に実行するように最適化されています。

于 2012-01-10T09:39:49.483 に答える