这是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"
}
}
有什么想法吗?我知道有一种简单的方法,但我找不到它......
答案 0 :(得分:0)
您可以使用bool
query将多个查询与子句合并。在这种情况下,必须满足两个条件,因此两个查询都应该是must
条款
{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "item1",
"fields": [
"name"
]
}
},
{
"query_string": {
"query": "A",
"fields": [
"class"
]
}
}
]
}
}
}
如果您不需要相关性分数(在这种情况下看起来不是这样),则两个查询都可以是filter
条款而不是must
条款。
如果将name
和class
映射为keyword
datatypes,您可能需要使用术语级查询,而不是像query_string
查询这样的全文查询。这是使用filter
子句
{
"query": {
"bool": {
"filter": [
{
"term": {
"name": {
"value": "item1"
}
}
},
{
"term": {
"class": {
"value": "A"
}
}
}
]
}
}
}