@dexes56
PHP developer

ElasticSearch: как корректно искать по вложенным структурам?

В индексе эластика хранятся вложенные структуры данных по которым хочется осуществлять корректный поиск.

Пример индекса:
{
    "title": {"type": "text"},
    "subEntity": {
        "type": "object",
        "properties": {
            "id": {"type": "integer"},
            "value": {"type": "text"}
        }
    }
}

Пример данных:
{
    "title": "Stub",
    "subEntity": [
        {"id": 1, "value": "red"},
        {"id": 2, "value": "yellow"},
        {"id": 3, "value": "green"}
    ]
}

Пример запроса:
{
    "query": {
        "bool": {
            "must": [
                {"match": {"subEntity.id": 1}},
                {"match": {"subEntity.value": "yellow"}}
            ]
        }
    }
}

Естественно поиск будет осуществляться не на уровне одной и той же вложенной структуры (subEntity), а по всем вложенным структурам в рамках одной записи, и по описанному запросу найдётся приведённый выше пример.

Можно ли каким-то образом, не перестраивая индекс, организовать запрос так, чтобы поиск производился в рамках каждой вложенной структуры, а не записи в целом?

Если для корректного поиска по subEntity их всё таки придётся вынести в отдельный индекс, то можно ли получать родительские записи одним запросом?

Версия ES: 6.4
  • Вопрос задан
  • 274 просмотра
Решения вопроса 2
erniesto77
@erniesto77
oop, mvc, rb, py, php, js
надо посмотреть в гугле по запросу "elastic search handle relations"
вот например https://www.elastic.co/guide/en/elasticsearch/guid...
Ответ написан
leahch
@leahch
Я мастер на все руки, я козлик Элек Мэк :-)
Индекс придется перестроить и сделать subEntry типом nested.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы