У меня есть данные по индексу ElasticSearch, который выглядит как этотусловия Elasticsearch запроса на массиве значений
{
"title": "cubilia",
"people": [
"Ling Deponte",
"Dana Madin",
"Shameka Woodard",
"Bennie Craddock",
"Sandie Bakker"
]
}
Есть ли способ для меня, чтобы сделать поиск для всех людей, чье имя начинается с «лин» (должен быть нечувствительным к регистру) и получить четкие термины, правильно обложенные «Ling Deponte», а не «ling deponte»? Я нахожусь с изменяющимися отображениями по индексу любым способом.
Edit делает то, что я хочу, но на самом деле плохой запрос:
{
"size": 0,
"aggs": {
"person": {
"filter": {
"bool":{
"should":[
{"regexp":{
"people.raw":"(.*)?[lL][iI][nN][gG].*"
}}
]}
},
"aggs": {
"top-colors": {
"terms": {
"size":10,
"field": "people.raw",
"include":
{
"pattern": ["(.*)?[lL][iI][nN][gG].*"]
}
}
}
}
}
}
}
people.raw является not_analyzed
Спасибо .. Сначала не использовал много полей и после добавления его я забыл. анализируемое поле. Как вы думаете, есть способ избавиться от «include»: {"pattern": ["(. *)? [LL] [iI] [nN] [gG]. *"]} А? У меня возникла идея сделать людей вложенными объектами с полем имени, но я не говорю о производительности. Могу ли я создавать вложенные объекты как объекты? –
Вложенная производительность, особенно на одном уровне, очень хороша. Вы должны изменить его на «людей»: [{«name»: «Ling Deponte»}, {"name": "abc"}, ...] ', но тогда это сработает с использованием внутренних ударов с этим. [Внутренние хиты] (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-inner-hits.html) буквально выполняет второй запрос, но против небольшого подмножества он должен быть Хорошо. Это также полностью исключало бы агрегацию. – pickypg