我有一张表格可以编辑,body
和body_edited
。将内容添加到表中时,body
字段始终存在且body_edited
为null。 body_edited
适用于将来可能会更改的一小部分内容,用于面向公众的内容,同时保留原始内容。
我需要以这样的方式搜索这些数据:body_edited
用于搜索,但当body
不存在时,它会回落到body_edited
。我已经找到了如何为空字段输入一个虚拟值,但我不知道如何只用一个查询就可以回退到另一个字段。
由于遗留原因,将保留body
字段。从SQL导入数据时创建第三个字段已作为选项提出,但它将大大增加存储所需的空间量。
有没有办法通过跨两个字段的查询来实现这一目标?
你可以使用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
字段也符合我们的搜索条件,但该查询将仅返回第一个文档。