阻止BooleanQuery $ TooManyClauses错误elasticsearch

时间:2017-10-10 07:07:18

标签: elasticsearch-5

以下是我的索引设置。我正在使用shingle filter for xyz type of index for field synonym。

{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer_keyword": {
          "type": "custom",
          "tokenizer": "keyword",
          "filter": [
            "asciifolding",
            "lowercase"
          ]
        },
        "my_analyzer_shingle": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "asciifolding",
            "lowercase",
            "shingle"
          ]
        }
      }
    }
  }
},
abc: {
  "abc": {
    "properties": {
      "value": {
        "type": "string",
        "search_analyzer": "my_analyzer_keyword",
        "analyzer": "my_analyzer_keyword"
      }
    }
  }
},
xyz: {
  "xyz": {
    "properties": {
      "synonym": {
        "type": "string",
        "search_analyzer": "my_analyzer_shingle",
        "analyzer": "my_analyzer_keyword"
      }
    }
  }
}

我有输入文字,其中没有任何单词可以是30或更多。我的要求是从我提供的这个特定输入文本中获取xyz类型的所有同义词字段。所以我使用以下查询,但它抛出BooleanQuery $ TooManyClauses异常。

{
     "query": {
        "match": {
            "synonym": {
                "query": "abas asas asas qwqw ererer asas asas kjjkkj hhha asas nnn jhhha kkka nnna asas qwqw asas qwqw sdsd qwqw erer rtrtr fgfg asas nnn jhhha kkka nnna asas qwqw asas qwqw sdsd qwqw erer rtrtr fgfg "
            }
        }
    }
}

此外,我需要识别所有单字母同义词以及此输入文本中的双字母同义词。 我也尝试增加indices.query.bool.max_clause_count 4096。 仍然是它的投掷错误。

1 个答案:

答案 0 :(得分:1)

对于给定的输入文本,它超过了太多的子句/术语,这超过了创建索引时提供的max clause count 4096设置。解决方案是将输入文本分解为两个或多个查询,并将这些结果组合在一起工作正常。 2个瓦片工作正常,带有13个字母输入文本,最大子句数设置为4096。