我有一个表,其中包含可以编辑的数据body
和body_edited
。将内容添加到表时,body
字段始终存在,而body_edited
为空。 body_edited
用于一小部分内容,这些内容将来可能会更改,并在保持原始内容的同时用于面向公众的内容。
我需要使用body_edited
进行搜索的方式来搜索此数据,但是当body
不存在时会回退到body_edited
。我已经找到了如何为空字段输入虚拟值,但是我看不到如何仅通过查询就可以退回到另一个字段。
body
字段将由于传统原因而保留。可以选择在从SQL导入数据时创建第三个字段,但这将大大增加存储所需的空间量。
有什么方法可以通过跨两个字段的查询来实现这一目标?
答案 0 :(得分:2)
您可以使用should
和exists
子句来实现。假设您有以下两个文档:
// 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
字段也符合我们的搜索条件,但该查询将仅返回第一个文档。