Есть ли способ поиска в elasticsearch с вложенным json? - PullRequest
1 голос
/ 04 августа 2020

In elasti c данные поиска были сохранены в следующем формате:

{
'name': 'somename',
'data': '{"age": 25}'
}

Как искать как

{"match": {"data.age": 25}}

Ответы [ 2 ]

2 голосов
/ 04 августа 2020

Вам нужно использовать вложенный тип данных для вашего data поля, а затем вы можете использовать пример, приведенный в том же самом do c, чтобы запросить вложенные поля.

Короче говоря, вам необходимо включить nested path в свой запрос, если он правильно проиндексирован.

"nested": {
      "path": "data",

Добавление непрерывного рабочего примера в соответствии с вашим образцом

Отображение индекса

{
    "mappings": {
        "properties": {
            "name" : {
                "type" : "text"
            },
            "data": {
                "type": "nested"
            }
        }
    }
}

Запрос индекса

{
    "name": "somename",
    "data": {
        "age": 25
    }
}

поисковый запрос

{
    "query": {
        "nested": {
            "path": "data",
            "query": {
                "match": {
                    "data.age": 25
                }
            }
        }
    }
}

И результат поиска

"hits": [
            {
                "_index": "nested",
                "_type": "_doc",
                "_id": "1",
                "_score": 1.0,
                "_source": {
                    "name": "somename",
                    "data": {
                        "age": 25
                    }
                }
            }
        ]
1 голос
/ 04 августа 2020

GET / myIndex / _search

{
  "query": {
    "nested": {
      "path": "data",
      "query": {
          {"match": {"data.age": 25}}
      }
    }
  }
}

Подробнее см. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html.

...