一个ElasticSearch查询中的多个查询

时间:2018-05-17 16:28:27

标签: python 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"
            }
        }

有什么想法吗?我知道有一种简单的方法,但我找不到它......

1 个答案:

答案 0 :(得分:0)

您可以使用bool query将多个查询与子句合并。在这种情况下,必须满足两个条件,因此两个查询都应该是must条款

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

如果您不需要相关性分数(在这种情况下看起来不是这样),则两个查询都可以是filter条款而不是must条款。

如果将nameclass映射为keyword datatypes,您可能需要使用术语级查询,而不是像query_string查询这样的全文查询。这是使用filter子句

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