Elasticsearch вложенный тип запроса выбора - PullRequest
0 голосов
/ 16 марта 2019

У меня есть поле с отображением:

   "my_field_name": {
            "type": "nested",
            "properties": {
              "labels": {
                "type": "text"
              },
              "source": {
                "type": "text"
              }
            }
          }

, и когда я помещаю данные, формат выглядит так:

"my_field_name": {
            "url_of_an_image": [
              "tag1",
              "tag2",
              "tag3",
              "tag4",
              "tag5"
            ],
            "url_of_an_image2": [
              "tag4",
              "tag5",
              "tag6",
              "tag7",
              "tag8"
            ]
}

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

Как найти тег во всех документах и ​​выбрать те, которые содержат данный тег?

Спасибо

Ответы [ 2 ]

1 голос
/ 16 марта 2019

( ИЗМЕНЕНО ПОСЛЕ КОММЕНТАРИИ )

В качестве первого соображения сопоставление не соответствует структуре вашего документа, например, my_field_name не имеет ни полей labels, ни source. Какой из них лучше представляет ваши данные?

В качестве второго соображения в своем комментарии вы сказали, что

во время запроса я не знаю "url_of_an_image", поскольку он отличается для каждого документа

Однако, из вашего примера, похоже, что url_of_an_image является свойством элементов my_field_name, а не документа. Поэтому я бы предложил сделать что-то вроде:

"my_field_name": [
  {
    "image_url": "url_of_an_image",
    "tags": [
       "tag1",
       "tag2",
       "tag3",
       "tag4",
       "tag5"
    ]
  },
  {
    "image_url": "url_of_an_image2",
    "tags": [
       "tag4",
       "tag5",
       "tag6",
       "tag7",
       "tag8"
    ]
  }
]

И это будет отображение:

"my_field_name": {
  "type": "nested",
  "properties": {
     "image_url": {
       "type": "text"
     },
     "tags": {
       "type": "text"
    }
  }
}

Таким образом, вы можете запускать такие запросы, как:

{
  "query": {
    "nested" : {
      "path" : "my_field_name",
      "query" : {
        "bool" : {
          "must" : [
            { "match" : {"my_field_name.image_url" : "url_of_an_image2"} },
            { "match" : {"my_field_name.tags" : "tag3"} }
          ]
        }
      }
    }
  }
}
0 голосов
/ 16 марта 2019

Этого можно добиться с помощью вложенного запроса: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html

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