一个 ElasticSearch 查询中的多个查询



这里是在 ES 中索引的项目示例:

{
"_id" : ..,
"class": "A",
"name": "item1"
}

我想要一个查询,我可以在其中获取名称为"item1"的同一类项目的所有项目。所以基本上,我想要所有带有类A的索引项,只有名称。

我可以通过 2 个查询来做到这一点:

查询 1 :

SEARCH
{
"query": {
"query_string": {
"default_field": "name",
"query": "item1"
}
}

然后从这里我得到类并编写此查询:

SEARCH
{
"query": {
"query_string": {
"default_field": "class",
"query": "A"
}
}

知道吗?我知道有一个简单的方法,但我找不到它...

可以使用bool查询将多个查询与子句组合在一起。在这种情况下,必须满足两个条件,因此两个查询都应must子句

{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "item1",
"fields": [
"name"
]
}
},
{
"query_string": {
"query": "A",
"fields": [
"class"
]
}
}
]
}
}
}

如果您不需要相关性分数(在这种情况下似乎不需要(,则这两个查询都可以是filter子句而不是must子句。

如果nameclass映射为keyword数据类型,则可能需要使用术语级查询,而不是像query_string查询那样的全文查询。下面是使用filter子句的样子

{
"query": {
"bool": {
"filter": [
{
"term": {
"name": {
"value": "item1"
}
}
},
{
"term": {
"class": {
"value": "A"
}
}
}
]
}
}
}

最新更新