简体   繁体   中英

Multiple queries in one ElasticSearch Query

Here an example of an item indexed in ES :

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

I want a single query where I can get all items of the same class of the item with name "item1". So basically, I want all indexed items with class A , with only having the name.

I can do it with 2 queries :

Query 1 :

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

Then from this I get the class and I write this query :

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

Any idea ? I know there's an easy way but I can't find it...

You can combine multiple queries with clauses using a bool query . In this case, two criteria must be satisified, so both queries should be must clauses

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

If you don't need relevancy scores, which it doesn't appear that you do in this case, both queries could be filter clauses instead of must clauses.

If name and class are mapped as keyword datatypes , you may want to use a term-level query as opposed to a full-text query like query_string query. Here's what that would look like, using filter clauses

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM