Elasticsearch 排除多个术语的关联
Elasticsearch exclude association of multiple terms
我需要从搜索中排除不同术语的关联。有什么聪明的方法可以进行这种多项排除吗?
示例:假设我想获取所有用户,除了那些(姓氏是 Doe) 和 (名字是 John 或 Annie 或 没有 任何名字值)。
预期结果示例:
first_name | last_name | Search result
--------------------------------------
Bob | Doe | appears
--------------------------------------
Annie | Doe | excluded
--------------------------------------
(null) | Doe | excluded
--------------------------------------
John | Foo | appears
--------------------------------------
(null) | Foo | appears
到目前为止,我做的最好的是以下请求,但它不起作用:在我们的示例中,这个请求将排除所有姓氏为 Doe 的人,无论名字是什么……我不明白为什么?
GET user/_search
{
"query": {
"bool": {
"must_not": [
{
"bool": {
"must": [
{
"term": {
"last_name": "Doe"
}
}
]
}
},
{
"bool": {
"should": [
{
"bool": {
"must": [
{
"terms": {
"first_name": [
"John",
"Annie"
]
}
}
]
}
},
{
"bool": {
"must_not": {
"exists": {
"field": "first_name"
}
}
}
}
]
}
}
]
}
}
}
非常感谢 Elastic-sharp-eye 的任何帮助!
在must_not数组文档中不得匹配任何子句。
如果 last_name 是 Doe OR(first_name 是 annie 或 john 或不存在),您的查询基本上转化为不考虑文档
作为 AND 将您的查询放入 bool
{
"query": {
"bool": {
"must_not": [
{
"bool": {
"must": [
{
"match": {
"last_name": "Doe"
}
},
{
"bool": {
"should": [
{
"terms": {
"first_name.keyword": [
"John",
"Annie"
]
}
},
{
"bool": {
"must_not": {
"exists": {
"field": "first_name"
}
}
}
}
]
}
}
]
}
}
]
}
}
}
我需要从搜索中排除不同术语的关联。有什么聪明的方法可以进行这种多项排除吗?
示例:假设我想获取所有用户,除了那些(姓氏是 Doe) 和 (名字是 John 或 Annie 或 没有 任何名字值)。
预期结果示例:
first_name | last_name | Search result
--------------------------------------
Bob | Doe | appears
--------------------------------------
Annie | Doe | excluded
--------------------------------------
(null) | Doe | excluded
--------------------------------------
John | Foo | appears
--------------------------------------
(null) | Foo | appears
到目前为止,我做的最好的是以下请求,但它不起作用:在我们的示例中,这个请求将排除所有姓氏为 Doe 的人,无论名字是什么……我不明白为什么?
GET user/_search
{
"query": {
"bool": {
"must_not": [
{
"bool": {
"must": [
{
"term": {
"last_name": "Doe"
}
}
]
}
},
{
"bool": {
"should": [
{
"bool": {
"must": [
{
"terms": {
"first_name": [
"John",
"Annie"
]
}
}
]
}
},
{
"bool": {
"must_not": {
"exists": {
"field": "first_name"
}
}
}
}
]
}
}
]
}
}
}
非常感谢 Elastic-sharp-eye 的任何帮助!
在must_not数组文档中不得匹配任何子句。 如果 last_name 是 Doe OR(first_name 是 annie 或 john 或不存在),您的查询基本上转化为不考虑文档
作为 AND 将您的查询放入 bool
{
"query": {
"bool": {
"must_not": [
{
"bool": {
"must": [
{
"match": {
"last_name": "Doe"
}
},
{
"bool": {
"should": [
{
"terms": {
"first_name.keyword": [
"John",
"Annie"
]
}
},
{
"bool": {
"must_not": {
"exists": {
"field": "first_name"
}
}
}
}
]
}
}
]
}
}
]
}
}
}