使用elasticsearch返回null上的另一个字段

问题描述 投票:1回答:1

我有一张表格可以编辑,bodybody_edited。将内容添加到表中时,body字段始终存在且body_edited为null。 body_edited适用于将来可能会更改的一小部分内容,用于面向公众的内容,同时保留原始内容。

我需要以这样的方式搜索这些数据:body_edited用于搜索,但当body不存在时,它会回落到body_edited。我已经找到了如何为空字段输入一个虚拟值,但我不知道如何只用一个查询就可以回退到另一个字段。

由于遗留原因,将保留body字段。从SQL导入数据时创建第三个字段已作为选项提出,但它将大大增加存储所需的空间量。

有没有办法通过跨两个字段的查询来实现这一目标?

elasticsearch
1个回答
2
投票

你可以使用shouldexists条款来实现这一点。我们假设你有两个以下文件:

// Document 1
{
  "body": "quick brown fox",
  "body_edited": null
}

// Document 2
{
  "body": "quick brown fox",
  "body_edited": "jumps over the lazy dog"
}

以下是术语“棕色狐狸”的搜索查询示例:

"query": {
  "bool": {
    "should": [
      {
        "match": {
          "body_edited": "brown fox"
        }
      },
      {
        "bool": {
          "must": {
            "match": {
              "body": "brown fox"
            }
          },
          "must_not": {
            "exists": {
              "field": "body_edited"
            }
          }
        }
      }
    ]
  }
}

尽管文档2中的body字段也符合我们的搜索条件,但该查询将仅返回第一个文档。

© www.soinside.com 2019 - 2024. All rights reserved.