Elasticsearch 6.3.2 术语匹配空数组 "plus" 其他
Elasticsearch 6.3.2 terms match empty array "plus" others
在我的数据库中,post 可以有零 (0) 个或多个类别表示为一个数组。
当我进行查询时,要在这些类别中查找并传递一些值:
{
"query": {
"bool": {
"should": {
"terms": {
"categories": ["First", "Second", "And so on"]
}
}
}
}
}
它运作良好,我有我期待的记录。但是当我想包含那些 posts 时,问题就来了,其中 categories 是一个空数组 ([]).
我正在从旧版本的 ES (1.4.5) 升级到 6.3.2 版本,此代码是使用 "missing" 制作的,已被弃用。
我试过更改映射,添加著名的 "null_value": "NULL"
,然后查询,但没有成功。
还按照升级 "missing" 的建议尝试了 should 与 must_not 的组合,但没有奏效。
我怎样才能做到这一点?意思是如果我有索引:
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'])
结果应该 return posts number 1, 2 y 3 - 具有 "news", "tv" 或空数组作为类别的那些。
可以使用 must_not
中的 exists
复制缺失。您必须按如下方式修改查询:
{
"query": {
"bool": {
"should": [
{
"terms": {
"categories": [
"First",
"Second",
"And so on"
]
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "categories"
}
}
]
}
}
]
}
}
}
你可以阅读它here。
在我的数据库中,post 可以有零 (0) 个或多个类别表示为一个数组。
当我进行查询时,要在这些类别中查找并传递一些值:
{
"query": {
"bool": {
"should": {
"terms": {
"categories": ["First", "Second", "And so on"]
}
}
}
}
}
它运作良好,我有我期待的记录。但是当我想包含那些 posts 时,问题就来了,其中 categories 是一个空数组 ([]).
我正在从旧版本的 ES (1.4.5) 升级到 6.3.2 版本,此代码是使用 "missing" 制作的,已被弃用。
我试过更改映射,添加著名的 "null_value": "NULL"
,然后查询,但没有成功。
还按照升级 "missing" 的建议尝试了 should 与 must_not 的组合,但没有奏效。
我怎样才能做到这一点?意思是如果我有索引:
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'])
结果应该 return posts number 1, 2 y 3 - 具有 "news", "tv" 或空数组作为类别的那些。
可以使用 must_not
中的 exists
复制缺失。您必须按如下方式修改查询:
{
"query": {
"bool": {
"should": [
{
"terms": {
"categories": [
"First",
"Second",
"And so on"
]
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "categories"
}
}
]
}
}
]
}
}
}
你可以阅读它here。