Search code examples
elasticsearchelasticsearch-aggregation

elasticsearch match query returns empty results for nested fields


I am following this link I have an index test_products with following mapping:

{
"settings": {
    "number_of_shards": 1
},
"mappings": {
    "dynamic_templates": [
        {
            "search_result_data": {
                "mapping": {
                    "type": "keyword"
                },
                "path_match": "search_result_data.*"
            }
        }
        ],
    "properties": {
        "search_data": {
            "type": "nested",
            "properties": {
                "full_text": {
                    "type": "text"
                },
                "string_facet": {
                    "type": "nested",
                    "properties": {
                        "facet-name": {
                            "type": "keyword"
                        },
                        "facet-value": {
                            "type": "keyword"
                        }
                    }
                }
            }
        }
    }
}
}

And a document inserted with following format:

    {
  "search_result_data": {
    "sku": "wheel-6075-90092",
    "gtin": null,
    "name": "Matte Black Wheel Fuel Ripper",
    "preview_image": "abc.jg",    
    "url": "9836817354546538796",
    "brand": "Fuel Off-Road"
  },
  "search_data": 
    {
      "full_text": "Matte Black Wheel Fuel Ripper",
      "string_facet": [
        {
          "facet-name": "category",
          "facet-value": "Motor Vehicle Rims & Wheels"
        },
        {
          "facet-name": "brand",
          "facet-value": "Fuel Off-Road"
        }
      ]
    }    
}

and few other documents..

I am trying to full-text search the index with following query:

{
    "query": {
        "match": {
            "search_data.full_text": "Black"
        }
    }
}

I am getting empty results for this query although the field contains term Black.


Solution

  • Since your search_data field is nested you need to use nested query as well:

    {
      "query": {
        "nested": {
          "path": "search_data",
          "query": {
            "match": {
              "search_data.full_text": "Black"
            }
          }
        }
      }
    }