kuromoji tokenizerと synonym filterを使っている時、どのようにTooManyClausesを回避することができるでしょう?
設定するべき適切なmax_clause_count 値を見つける算出方法はありますでしょうか?あるいは類義語辞書を使う場合、max_clause_count値を増やす以外に、この問題を起こさなくする手段がありますでしょうか?
状況: Simple Query String がある単語の検索で TooManyClauses でエラーになります。ある単語は max_clause_count 値を増やすことで回避できましたが、別の単語ではそれでは不足でさらに増やす必要がありました。フリー入力語が対象ですので、たまたまある単語検索で起きたエラーを回避するmax_clause_count値を見つけるこの方式では、きりがなく、確証もなく、困っています。
補足: kuromoji tokenizerと synonym filterを使っています。同じ単語の検索でも、synonym filterなしのindexに作り変えればエラーは起きなくなり、synonym filterありでも類義語辞書を小さくすれば、エラーは起きなくなります。synonym filterは使う方針で、類義語辞書も小さくしない方針です。
環境:
Elasticsearch v5.6.8
/etc/elasticsearch/elasticsearch.yml
indices.query.bool.max_clause_count: 153600
Query body:
{
"query": {
"simple_query_string": {
"query": "テキスト",
"fields": ["field1"],
}
}
}
Error log: /var/log/elasticsearch/elasticsearch.log
org.elasticsearch.index.query.QueryShardException: failed to create query: {
"simple_query_string" : {
"query" : "テキスト",
"fields" : [
"field1^1.0"
],
"flags" : -1,
"default_operator" : "or",
"lenient" : false,
"analyze_wildcard" : false,
"boost" : 1.0
}
}
:
Caused by: org.apache.lucene.search.BooleanQuery$TooManyClauses: maxClauseCount is set to 153600