这里是在 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
子句。
如果name
和class
映射为keyword
数据类型,则可能需要使用术语级查询,而不是像query_string
查询那样的全文查询。下面是使用filter
子句的样子
{
"query": {
"bool": {
"filter": [
{
"term": {
"name": {
"value": "item1"
}
}
},
{
"term": {
"class": {
"value": "A"
}
}
}
]
}
}
}