elasticsearch - 将_routing与脚本中文档的另一个字段进行比较

标签 elasticsearch elasticsearch-painless

E.S版本: 5.5.2
示例文档:

{
    "_index": "test_index",
    "_type": "doc",
    "_id": "5485044",
    "_score": 1,
    "_routing": "135767",
    "_source": {
      "e_id": 135767
    }
  }
要求:
要获取所有文档,其中_routing与e_id不匹配
查询:
GET test_index/_search
{
  "size": 1000, 
  "query": {
    "bool": {
      "filter": {
        "script": {
          "script": "'_routing'!=doc['e_id'].value.toString()"
        }
      }
    }
  }
结果:我得到的答复不是预期的。带有_routing == e_id的O / P文档也已匹配。

最佳答案

无法在搜索查询中访问_routing值。
但是,您可以做的是先标记所有e_id值不同于_routing值的文档,然后查询标记的文档。
首先,通过查询运行更新以标记所有文档

POST test_index/_update_by_query
{
  "script": {
    "source": "ctx._source.routingOk = (ctx._routing == ctx._source.e_id.toString())",
    "lang": "painless"
  }
}
然后查询具有routingOk: false的文档:
GET test/_search?q=routingOk:false

关于elasticsearch - 将_routing与脚本中文档的另一个字段进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63260058/

相关文章:

elasticsearch - 如何在 elasticsearch 中定义一个不接受映射字段以外的字段的映射?

python - 如何配置 elasticsearch 以使用具有基本身份验证的 SSL

elasticsearch - elasticsearch如何处理脚本化更新查询中的返回?

elasticsearch - Elasticsearch脚本查询按字段值获取参数

elasticsearch - Elasticsearch从动态生成的索引中的数组对象中删除字段

elasticsearch - 从ElasticSearch查询的日期字段中提取日期(yyyyMMdd)

elasticsearch - 如何做 "group by/max"查询?

elasticsearch - Elasticsearch嵌套数据搜索性能

java - Play Framework : Store connections after onStart?

elasticsearch - 从字段数组中提取文本