【问题标题】:Comparing _routing with another field of document in script将_routing与脚本中的另一个文档字段进行比较
【发布时间】:2020-08-05 07:06:39
【问题描述】:

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 文档也正在匹配中。

【问题讨论】:

    标签: elasticsearch elasticsearch-painless


    【解决方案1】:

    无法在搜索查询中访问 _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
    

    【讨论】:

      猜你喜欢
      • 2019-10-08
      • 2018-11-05
      • 2015-12-21
      • 1970-01-01
      • 2022-01-09
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多