通过Elasticsearch回归到null的另一个领域

时间:2018-09-11 10:03:01

标签: elasticsearch

我有一个表,其中包含可以编辑的数据bodybody_edited。将内容添加到表时,body字段始终存在,而body_edited为空。 body_edited用于一小部分内容,这些内容将来可能会更改,并在保持原始内容的同时用于面向公众的内容。

我需要使用body_edited进行搜索的方式来搜索此数据,但是当body不存在时会回退到body_edited。我已经找到了如何为空字段输入虚拟值,但是我看不到如何仅通过查询就可以退回到另一个字段。

body字段将由于传统原因而保留。可以选择在从SQL导入数据时创建第三个字段,但这将大大增加存储所需的空间量。

有什么方法可以通过跨两个字段的查询来实现这一目标?

1 个答案:

答案 0 :(得分: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字段也符合我们的搜索条件,但该查询将仅返回第一个文档。