поиск по массиву объектов вasticsearch - PullRequest
1 голос
/ 10 октября 2019

Я используюasticsearch-6.4.3

Я создал индекс test_index со следующим отображением:

PUT test_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "name": {
          "type": "keyword"
        },
        "segments": {
          "type": "nested",
          "properties": {
            "f1": {
              "type": "keyword"
            },
            "f2": {
              "type": "integer"
            }
          }
        }
      }
    }
  }
}

Я вставил документ в индекс с помощью следующей команды:

POST /test_index/_doc
{
  "name": "ABC",
  "segments": [{
    "f1": "abc",
    "f2": 123
  }, 
  {
    "f1": "def",
    "f2": 124
  }]
}

У меня есть массив значений, скажем arr = ["def", "xyz"]. Я хочу сопоставить все документы, по крайней мере один из которых f1 field in segments field совпадает с любым из значений в данном массиве arr.

Вы можете назвать его чем-то вроде array_intersect, чтобы его было легче понять.

Я пытаюсь что-то вроде этого:

GET /test_index/_search
{
"query": {
    "nested": {
      "path": "segments",
      "query": {
        "bool": {
          "must": [
            {
              "terms": {
                "f1": [ 
                  "def",
                  "xyz"
                ]
              }
            }
          ]
        }
      }
    }
  }
}

Я не получаю результатов в качестве вывода.
Expected output: документ должен совпадать, так как «def» присутствует в качестве значения f1 в документе.

1 Ответ

1 голос
/ 10 октября 2019

Вам необходимо указать полный путь в запросе терминов как segments.f1 вместо f1 для вложенного запроса .

Измените запрос, как показано ниже:

POST test_index/_search
{ 
   "query":{ 
      "nested":{ 
         "path":"segments",
         "query":{ 
            "bool":{ 
               "must":[ 
                  { 
                     "terms": {
                       "segments.f1": ["def","xyz"]    <---- Mention full path here

                     }
                  }
               ]
            }
         }
      }
   }
}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...