#elasticsearch #elasticsearch-dsl
#elasticsearch #elasticsearch-dsl
Вопрос:
Наличие этого шаблона (сокращенная версия).
{
"index_patterns": "index_pattern*",
"order": 1,
"version": 1,
"aliases": {
"some_alias": {}
},
"settings": {
"number_of_shards": 5,
},
"mappings": {
"dynamic": "false",
"properties": {
"someId": {
"type": "keyword"
},
"audience": {
"type": "object",
"properties": {
....
"ageRanges": {
"type": "nested",
"properties": {
"ageTo": {
"type": "integer"
},
"ageFrom": {
"type": "integer"
}
}
}
}
}
}
}
}
Мне нужно запросить, audience.ageRanges
не существует ли он, или, если он существует, применить другие фильтры.
Допустим, мы хотим выполнить поиск, если документ с определенным someId
значением вписывается в audience.ageRanges
предложения запроса (удалено для ясности). У него есть некоторые свойства аудитории, но нет ageRanges
.
"audience": {
"genders": [
"any"
],
"deviceType": "any"
}
Разве приведенный ниже запрос не должен возвращать конкретный документ?
{
"query": {
"bool": {
"must": [
{
"term": {
"someId": {
"value": "03183f31"
}
}
},
{
"nested": {
"path": "audience.ageRanges",
"query": {
"bool": {
"must_not": [
{
"exists": {
"field": "audience.ageRanges"
}
}
]
}
}
}
}
]
}
}
}
Мои результаты равны 0, это немного сбивает с толку, как это работает.
Попытка с идентификатором документа, в котором есть audience.ageRanges
элементы, и изменение must_not
вложенного запроса на must
вернет результаты.
Ответ №1:
Вместо того, чтобы помещать must_not
внутри вложенного запроса, вы должны поместить вложенный запрос внутри must_not
.
Рассмотрим образец данных индекса как
{
"someId":123,
"audience": {
"genders": [
"any"
],
"deviceType": "any"
}
}
Вам необходимо изменить свой поисковый запрос, как показано ниже —
Поисковый запрос:
{
"query": {
"bool": {
"must": [
{
"term": {
"someId": {
"value": "123"
}
}
},
{
"bool": {
"must_not": {
"nested": {
"path": "audience.ageRanges",
"query": {
"bool": {
"must": [
{
"exists": {
"field": "audience.ageRanges"
}
}
]
}
}
}
}
}
}
]
}
}
}
Результат поиска:
"hits": [
{
"_index": "65852173",
"_type": "_doc",
"_id": "1",
"_score": 0.2876821,
"_source": {
"someId": 123,
"audience": {
"genders": [
"any"
],
"deviceType": "any"
}
}
}
]
Комментарии:
1. @Джордж Таскос у вас была возможность ознакомиться с ответом, с нетерпением жду обратной связи от вас 🙂