#json #django #elasticsearch #elasticsearch-dsl
#json #джанго #эластичный поиск #elasticsearch-dsl
Вопрос:
Я использую пакет django-elasticsearch-dsl-drf, и у меня есть Postgres JSONField, который я хочу проиндексировать. Я попытался использовать Nestedfield в документе, но без каких-либо свойств, поскольку поле json является произвольным, но я не могу выполнить поиск по этому полю, и я не вижу ничего, связанного с этим, в их документации.
Есть какие-нибудь идеи, как я могу этого добиться?
Отображение:
{
"mappings": {
"_doc": {
"properties": {
"jsondata": {
"type": "nested",
"properties": {
"timestamp": {
"type": "date"
},
"gender": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"group_id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}, ...
Я хочу выполнить поиск по этому полю, например, jsondata.gender = x
Комментарии:
1. Вложенные поля должны использоваться для массива объекта. Также запрос вложенных объектов в Elasticsearch немного отличается. Пожалуйста, посмотрите на: elastic.co/guide/en/elasticsearch/reference/current/nested.html . Поскольку поле json является произвольным, было бы неплохо, если бы можно было попробовать с типом объекта.
2. Я пробовал оба, и это правильно отображалось. но как я могу выполнить поиск по этому полю внутри viewset? «как в их документе»
3. Было бы неплохо, если бы вы могли поделиться картированием и некоторыми примерами данных.
4. вопрос обновлен. Как и в их документе, у них есть «фильтр вложенных полей», но они знают ключи, которые они хотят искать в нем. в моем случае я этого не знаю. мы ценим вашу помощь!
5. был ли запрос полезным?
Ответ №1:
Запрос для jsonfield.gender = x
GET <index>/_search
{
"query": {
"nested": {
"path": "jsonfield",
"query": {
"term": {
"jsonfield.gender.keyword": {
"value": "x"
}
}
}
}
}
}
ПРИМЕЧАНИЕ: Запрос не был проверен с помощью инструментов разработчика Kibana.