Исправление простого запроса Elasticsearch

У меня есть ниже данные:

{
   "results":[
      {
         "ID":"1",
         "products":[
            {
               "product":"car",
               "number":"5"
            },
            {
               "product":"computer",
               "number":"212"
            }
         ]
      },
      {
         "ID":"2",
         "products":[
            {
               "product":"car",
               "number":"9"
            },
            {
               "product":"computer",
               "number":"463"
            },
            {
               "product":"bicycle",
               "number":"5"
            }
         ]
      }
   ]
}

И мой запрос ниже:

{  
   "query":{  
      "bool":{  
         "must":[  
            {  
               "wildcard":{  
                  "results.products.product":"*car*"
               }
            },
            {  
               "wildcard":{  
                  "results.products.number":"*5*"
               }
            }
         ]
      }
   }
}

Я ожидаю получить только ID1. Потому что только у него есть продукт с записью { "product":"car", "number":"5" }. Но я получаю и ID1, и ID2, потому что первая запись ID2 имеет "product": "car", а третья запись имеет "number": "5" записей отдельно.

Как я могу исправить этот запрос?

1 ответ

Решение

Вы должны определить свои продукты как вложенный тип при создании отображения. Попробуйте использовать следующий пример сопоставления:

PUT http://localhost:9200/indexname

{
  "mappings": {
     "typename": {
        "properties": {
           "products" : {
              "type" : "nested"
            }
          }
       }
    }
 }

Затем вы можете использовать вложенные запросы, чтобы соответствовать целым элементам вашего массива - так, как вам нужно.

{
  "query": {
    "nested": {
      "path": "products",
      "query": {
        "bool": {
          "must": [
            { "wildcard": { "products.product": "*car*" }},
            { "wildcard": { "products.number":  "*5*" }} 
          ]
        }
      }
    }
  }
}
Другие вопросы по тегам