Elasticsearch 数组相交查询
Elasticsearch Array Intersect Query
我正在尝试根据数组字段是否至少具有
来自另一组的一个元素。
我有一个包含字符串数组的字段,例如:
_source: {
...
keywords: [
"Data Science",
"Chemistry",
"Biology",
"Computer Science",
"Economics"
]
}
我想过滤结果,使关键字至少包含以下一项
值列表,例如:
> ["History","Biology"] # would return the above document
> ["History","Geography"] # would not
它包含多少并不重要,重要的是它匹配
至少其中之一。
我尝试了条款查询,但没有给我任何结果
默认情况下 terms query 是 OR-query,因此以下将匹配
{
"query": {
"terms": {
"keywords": [
"Chemistry",
"Geography"
]
}
}
}
如果你的条件such that keywords contain at least one
是要满足的。
现在,如果要求是使用 AND 查询(如果再有一个 not 匹配,return null),您可以使用 bool-must查询
{
"query": {
"bool": {
"must": [
{
"term": {
"keywords": {
"value": "Chemistry"
}
}
},
{
"term": {
"keywords": {
"value": "Geography"
}
}
}
]
}
}
}
您可能需要将 .keyword
附加到相关字段。
我正在尝试根据数组字段是否至少具有 来自另一组的一个元素。
我有一个包含字符串数组的字段,例如:
_source: {
...
keywords: [
"Data Science",
"Chemistry",
"Biology",
"Computer Science",
"Economics"
]
}
我想过滤结果,使关键字至少包含以下一项 值列表,例如:
> ["History","Biology"] # would return the above document
> ["History","Geography"] # would not
它包含多少并不重要,重要的是它匹配 至少其中之一。
我尝试了条款查询,但没有给我任何结果
默认情况下 terms query 是 OR-query,因此以下将匹配
{
"query": {
"terms": {
"keywords": [
"Chemistry",
"Geography"
]
}
}
}
如果你的条件such that keywords contain at least one
是要满足的。
现在,如果要求是使用 AND 查询(如果再有一个 not 匹配,return null),您可以使用 bool-must查询
{
"query": {
"bool": {
"must": [
{
"term": {
"keywords": {
"value": "Chemistry"
}
}
},
{
"term": {
"keywords": {
"value": "Geography"
}
}
}
]
}
}
}
.keyword
附加到相关字段。