Multiple Paths in nested query


(Hunter Herman) #1

Below is an example, but first I'll tell you about my use case, because I'm not sure if this is a good approach. I'm trying to automatically index a large collection of typed data. What this means is I'm trying to generate mappings and queries on those mappings all automatically based on information about my data. A lot of my data is relational, and I'm interested in being able to search accross the relations, thus I'm also interested in using Nested data types.

However, the issue is that many of these types have on the order of 10 relations, and I've got a feeling its not a good idea to pass 10 identical copies of a nested query to elasticsearch just to query 10 different nested paths the same way. Thus, I'm wondering if its possible to instead pass multiple paths into a single query? Better yet, if its possible to search over all fields in the current document and in all its nested documents and their fields in a single query. I'm aware of object fields, and they're not a good fit because I want to retrive some data of matched nested documents.

In this example, I create an index with multiple nested types and some of its own types, upload a document, and attempt to query the document and all its nested documents, but fail. Is there some way to do this without duplicating the query for each nested document, or is that actually a performant way to do this? Thanks

PUT /my_index
{
    "mappings": {
        "type1" : {
            "properties" : {
                "obj1" : {
                    "type" : "nested",
                    "properties": {
                      "name": {
                        "type":"text"
                      },
                      "number": {
                        "type":"text"
                      }
                    }
                },
                "obj2" : {
                    "type" : "nested",
                    "properties": {
                      "color": {
                        "type":"text"
                      },
                      "food": {
                        "type":"text"
                      }
                    }
                },
                "lul":{
                  "type": "text"
                },
                "pucci":{
                  "type": "text"
                }
            }
        }
    }
}
PUT /my_index/type1/1
{
  "obj1": [
    { "name":"liar", "number":"deer dog"},
    { "name":"one two three", "number":"you can call on me"},
    { "name":"ricky gervais", "number":"user 123"}
    ],
  "obj2": [
    { "color":"red green blue", "food":"meatball and spaghetti"},
    { "color":"orange", "food":"pineapple, fish, goat"},
    { "color":"none", "food":"none"}
    ],
  "lul": "lul its me user123",
  "field": "one dog"
    
}
POST /my_index/_search
{
  "query": {
    "nested": {
      "path": ["obj1", "obj2"],
      "query": {    
        "query_string": {
          "query": "ricky",
          "all_fields": true
        }   
      }
    }
  }
}

(system) #2

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.