In Elasticsearch, the multi_match query is commonly used to search for the same text in multiple fields within the same level of the document. When dealing with nested objects, you can use the nested query to perform searches within the nested fields. However, when you want to combine multiple multi_match queries for different fields within the nested object, you need to use the bool query with a must context inside the nested query.

Here's how you can use multi_match with nested objects outside the "should" context in Elasticsearch:

Suppose you have an index with documents containing nested objects like this:

{ "mappings": { "properties": { "name": { "type": "text" }, "nested_field": { "type": "nested", "properties": { "field1": { "type": "text" }, "field2": { "type": "text" } } } } } }

To perform a multi_match query on fields within the nested object with a "must" condition (i.e., all conditions must match), you can use the following Elasticsearch query:

{ "query": { "nested": { "path": "nested_field", "query": { "bool": { "must": [ { "multi_match": { "query": "search_text", "fields": ["nested_field.field1", "nested_field.field2"] } } ] } } } } }

In this example, we used the nested query to specify the nested object path, which is "nested_field". Inside the nested query, we used a bool query with a "must" context, which is equivalent to an "AND" condition. Within the bool query, we added the multi_match query to search for the "search_text" in the fields "nested_field.field1" and "nested_field.field2".

The multi_match query performs the search across multiple fields with the specified query text. By combining it with the bool query inside the nested query, we can achieve a "must" condition, where all fields within the nested object must match the search criteria.

Remember to adjust the field names and index mapping to match your actual data structure. Also, consider the impact of nested queries on performance, as they can be more resource-intensive compared to non-nested queries.

Have questions or queries?
Get in Touch