#json #elasticsearch
#json #elasticsearch
Вопрос:
Я работаю над ElasticSearch с целью хранения и извлечения данных в формате json. Проблема в том, что ES обрабатывает json как текст / строку, когда я использую функцию поиска / выделения, и не выполняет мое требование, то есть получить все родительские файлы сохраненного json в результате поиска. Например, если у меня есть json, подобный этому:
{"jsonfile.htm":{"Headingtag":"100129","Sectiontext":{"part i":{"Headingtag":"p1","Sectiontext":{"Random Heading I":{"Sectiontext":"Impossible considered invitation him men instrument saw celebrated unpleasant."},"Random Heading II":{"Sectiontext":"Prevailed discovery immediate objection of ye at."}}}}}}
Когда мы используем функцию поиска или выделения для «знаменитого» текста, это дает мне результат, подобный этому:
[выделить] => Массив ( [подробно] => Array ( [0] => «:{» Случайный заголовок I»:{«Sectiontext»:»Невозможно считать приглашение его мужчин, инструмент видел, как праздновали ) )
Он рассматривает json как строку и игнорирует отношение родитель-потомок. Кто-нибудь может помочь мне узнать, как получить все искомые текстовые родительские элементы в результате?
Комментарии:
1. Извините за мой первый пост. Что вы хотите, так это иметь древовидный вид от корня до поля, подобного: Sectiontext.часть i.Sectiontext.Случайный заголовок I.Sectiontext»: «Невозможно считать приглашение, которое ему, как инструменту, отметили, неприятным». ?
2. @Jaycreation да, у меня это сработает. Я просто хочу получить все родительские элементы искомого текста.
Ответ №1:
Вероятно, вам следует просто использовать возможность использовать * в «выделить». Если я возьму ваш пример:
GET my-index/_search
{
"query": {
"multi_match": {
"query": "celebrated",
"fields": ["jsonfile.*"]
}
},
"highlight": {
"fields": {
"jsonfile.*": {}
}
}
}
И результатом будет:
{
"_index" : "test-5",
"_type" : "_doc",
"_id" : "r4fdAXQBw1rncBcgXr08",
"_score" : 0.2876821,
"_source" : {
"jsonfile.htm" : {
"Headingtag" : "100129",
"Sectiontext" : {
"part i" : {
"Headingtag" : "p1",
"Sectiontext" : {
"Random Heading I" : {
"Sectiontext" : "Impossible considered invitation him men instrument saw celebrated unpleasant."
},
"Random Heading II" : {
"Sectiontext" : "Prevailed discovery immediate objection of ye at."
}
}
}
}
}
},
"highlight" : {
"jsonfile.htm.Sectiontext.part i.Sectiontext.Random Heading I.Sectiontext" : [
"Impossible considered invitation him men instrument saw <em>celebrated</em> unpleasant."
]
}
}
Конечно, вы также можете отключить _source в своем запросе, если вы не используете is.
Комментарии:
1. Это работает, но полезно только тогда, когда мы проиндексировали только данные json. Есть ли какой-либо способ сохранить другую информацию, такую как document_id, document_type и т.д., Вместе с данными json?
2. Да, я думаю, это был ваш вариант использования. Что касается других данных, если они есть в вашем исходном поле, вам нужно будет найти их здесь. вы должны добавить их в свой документ во время загрузки.