一个ElasticSearch查询中的多个查询

2024-04-23 21:39:53 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是在ES中索引的项的示例:

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

我想要一个单一的查询,在这里我可以得到所有项目的同一类的项目与名称“item1”。所以基本上,我希望所有的索引项都是类A,只有名称。你知道吗

我可以通过两个查询完成:

查询1:

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

然后从这个类中我得到了这个类,我写了这个查询:

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

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


Tags: 项目方法name名称iddefault示例field
1条回答
网友
1楼 · 发布于 2024-04-23 21:39:53

可以使用^{} query将多个查询与子句组合起来。在这种情况下,必须满足两个条件,因此两个查询都应该是must子句

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

如果您不需要相关性得分(在本例中似乎不需要相关性得分),那么两个查询都可以是filter子句,而不是must子句。你知道吗

如果nameclass映射为^{} datatypes,您可能希望使用术语级查询,而不是像query_string这样的全文查询。下面是使用filter子句的情况

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

相关问题 更多 >