== 检查两个字段 Elasticsearch

== check on two fields elasticsearch

提问人:Ramesh Papaganti 提问时间:7/19/2018 最后编辑:Ramesh Papaganti 更新时间:7/19/2018 访问量:42

问:

我有这样的场景,需要检查两个字段是否相等。 假设我有一个带有映射的索引my_index

    "field_one": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          },
          "regexkeyword": {
            "type": "keyword",
            "normalizer": "lowercase_normalizer"
          }
        },
        "analyzer": "simple"
      },
     "field_two": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          },
          "regexkeyword": {
            "type": "keyword",
            "normalizer": "lowercase_normalizer"
          }
        },
        "analyzer": "simple"
      }

在这里,我需要编写一个查询以通过匹配获取数据,这是我尝试过的field_onefield_two

 {
 "script_fields": {
     "adas": {
        "script": {
           "inline": "'field_one.keyword' == 'field_two.keyword'",
           "lang": "painless"
         }
     }
 }

注:弹性版本:5.5.3

Elasticsearch 脚本比较 相等性

评论

0赞 Adam T 7/19/2018
您的映射具有“filed_one”和“filed_two”,但您的查询指的是“field_one”和“field_two”。
0赞 Ramesh Papaganti 7/19/2018
@Adam 这可能是一个错别字,但字段被正确引用。

答:

0赞 Pierre Mallet 7/19/2018 #1

我认为语法是,但我在 ES 中没有实例.X 来测试它

{
 "script_fields": {
     "adas": {
        "script": {
           "inline": "doc['field_one.keyword'].value == doc['field_two.keyword'].value",
           "lang": "painless"
         }
     }
 }

评论

0赞 Ramesh Papaganti 7/20/2018
两种语法都给出了相同的结果,但不是预期的数据。