WordDelimiterGraphFilterを使用した際の過剰なクエリ展開
(The bot translated the original post https://lists.apache.org/thread/kbjgztckqdody9859knq05swvx5xj20f into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)
こんにちは:
現在、Solrインスタンスを5.1.0から8.7.0にアップグレードしています。インデックスには2億5000万以上のドキュメントがあります。これは以下の検索に対応しています:
クエリのフィルターチェーンでWordDelimiterGraphFilterを使用しており:
https://solr.apache.org/guide/8_7/filter-descriptions.html#word-delimiter-graph-filter
一部のクエリに対して非常に多くの句を生成し、クラスタに過度のCPU負荷をかけることが判明しました。場合によってはクラスタを再起動する必要がありました。
例えば、元のユーザークエリに対する“parsedquery”を見ると:
(McGillan OR McGillon OR McGillion OR McGillian OR McGillin OR M'Gillin OR M'Gillan OR M'Gillon)
次のようになっています:
(+((fulltext:"mcgillan mcgillon mcgillion mcgillian mcgillin mgillin mgillan mgillon"~5 fulltext:"mcgillan mcgillon mcgillion mcgillian mcgillin mgillin mgillan m gillon"~5 fulltext:"mcgillan mcgillon mcgillion mcgillian mcgillin mgillin m gillan mgillon"~5 fulltext:"mcgillan mcgillon mcgillion mcgillian mcgillin mgillin m gillan m gillon"~5 fulltext:"mcgillan mcgillon mcgillion mcgillian mcgillin m gillin mgillan mgillon"~5 ….
上記は一部抜粋で、実際のクエリにはこのフィールドに対して512の句が含まれています。他のフィールドでも同様の拡張が発生しており、全体のクエリには非常に多くの句が指定されることになります。
デバッガを使って調べたところ、QueryBuilder.analyzeGraphPhrase()がさまざまな組み合わせを生成しているメソッドであることがわかりました。このメソッドには次のコメントがあります:
“Creates a boolean query from the graph token stream by extracting all the finite strings from the graph and using them to create phrase queries with the appropriate slop.”
WordDelimiterFilter(現在は非推奨)に戻すと、解析されたクエリには次のようなものだけが追加されます:
fulltext:"(mc mcgillan) gillan (mc mcgillon) gillon (mc mcgillion) gillion (mc mcgillian) gillian (mc mcgillin) gillin (m mgillin) gillin (m mgillan) gillan (m mgillon) gillon"~5)
この設定では、他の設定で見られる負荷は発生しません。
WordDelimiterGraphFilterとその出力の解析方法は期待通りに機能していると考えられます。以下の問題に遭遇しました:
https://issues.apache.org/jira/browse/SOLR-13336
しかし、以下の設定:
https://solr.apache.org/guide/8_7/query-settings-in-solrconfig.html#maxbooleanclauses
を大幅に低い数値に設定するのが最善の解決策かどうかはわかりません。
過剰なクエリ展開を避ける方法を見つけたいと考えており、同様の問題に直面した方がいるかどうかをお尋ねしたいと思います。
アドバイスや提案をいただけると幸いです。
よろしくお願いします。
Francis
トピックへ返信するには、ログインが必要です。