![](/img/trans.png)
[英]How to match incomplete terms in Elasticsearch using Searchkick?
[英]Elasticsearch 6.3.2 terms match empty array “plus” others
在我的数据库中,帖子可以具有零(0)个或多个以数组表示的类别。
当我执行查询时,要查看这些类别,并传递一些值:
{
"query": {
"bool": {
"should": {
"terms": {
"categories": ["First", "Second", "And so on"]
}
}
}
}
}
而且效果很好,我有期望的记录。 但是问题出在我想包含那些帖子,其中类别是一个空数组([])的时候。
我正在从旧版本的ES(1.4.5)升级到版本6.3.2,并且此代码是使用“ missing”制作的,已弃用。
我尝试更改添加著名的"null_value": "NULL"
的映射,然后进行查询,但是没有用。 还尝试了应将must与must_not结合使用,如建议将其升级为“ missing”,但没有用。
我该如何实现? 这意味着如果我已建立索引:
Post.new(id: 1, title: '1st', categories: [])
Post.new(id: 2, title: '2nd', categories: ['news', 'tv'])
Post.new(id: 3, title: '3rd', categories: ['tv', 'trending'])
Post.new(id: 4, title: '4th', categories: ['movies'])
Post.new(id: 5, title: '5th', categories: ['technology', 'music'])
结果应返回1、2和3的帖子-以“新闻”,“电视”或空数组为类别的帖子。
可以使用must_not
内部exists
来复制丢失的must_not
。 您必须修改查询,如下所示:
{
"query": {
"bool": {
"should": [
{
"terms": {
"categories": [
"First",
"Second",
"And so on"
]
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "categories"
}
}
]
}
}
]
}
}
}
你可以在这里阅读。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.