Elasticsearch 2.x must_not 无法过滤匹配数据,但它在 5.3 中工作正常

Elasticsearch 2.x must_not can not filter match data, but it working fine in 5.3

Elasticsearch 2.x 和 5.x 使用 bool->must->match 都很好,但是 must_not 不能使用 Elasticsearch 2.x。如果用 match 替换 term,并指定一个精确的条件,它工作得很好。有什么方法可以使 must_not 和匹配在 Elasticsearch 2.x 中工作,谢谢。 json代码:

{
"query": {
    "bool": {
        "must_not": {
            "match": {
                "subject": "part"
            }
        }
    }
}

抱歉这个问题,我是Elasticsearch的新手,我没有发现我的同事为Es 2.x中的"subject"设置了三个子字段,我没有指定any 子字段,所以它 运行 什么都没有。两个引擎有不同的设置。

ES 2.x

{
"type": "string",
"index": "no",
"fields": {
    "py": {
        "type": "string",
        "term_vector": "with_positions_offsets",
        "analyzer": "pinyin_analyzer"
    },
    "pyfl": {
        "type": "string",
        "term_vector": "with_positions_offsets",
        "analyzer": "pinyin_analyzer_first_letter"
    },
    "raw": {
        "type": "string",
        "analyzer": "ik_max_word"
    }
}

}

ES 5.x

{
"type": "text",
"fields": {
    "keyword": {
        "type": "keyword",
        "ignore_above": 256
    }
}

用这个 json

效果很好
    {
"query": {
    "bool": {
        "must_not": {
            "match": {
                "subject.raw": "part"
            }
        }
    }
}

谢谢大家的回答。

我认为问题不在于版本。我使用的是 1.7 版。

你的 json 有问题,用 http://jsonlint.com/ 验证。 试试这个:-

{
  "query": {
    "bool" : {
      "must_not" : {
        "match" : { "subject" : "part" }
      }
    }
  }
}