#elasticsearch
#elasticsearch
Вопрос:
Я добавил новое поле вложенного объекта в индекс эластичного поиска. Я хочу обновить поле некоторым значением по умолчанию, например [ {«ключ»: «xyz», «значение»: «val1»}] . Я пытаюсь запросить индекс, в котором значение поля пустое или нулевое, но безуспешно.
Я пробовал это
"bool": {
"must_not": {
"exists": {
"field": "PropertyFields"
}
}
}
пример данных
[
{
"Id": 1,
"subjectPropertyFields": [
{
"value": "xyz",
"key": "zzz"
}
]
},
{
"Id": 2
},
{
"Id": 3
}
]
Я хочу запросить идентификаторы 2,3.
Комментарии:
1. не могли бы вы поделиться некоторыми образцами данных индекса и ожидаемым результатом поиска?
2. пример данных, я хочу запросить идентификаторы 2 и 3 [ { «Id»: 1, «subjectPropertyFields»: [ { «value»: «xyz», «key»: «zzz» } ] }, { «Id»: 2 }, { «Id»: 3 }]
Ответ №1:
Если вы хотите найти документы, в которых отсутствует поле вложенного объекта, вы можете использовать must_not
логический запрос с запросом exists .
Добавление рабочего примера с индексными данными, сопоставлением, поисковым запросом и результатом поиска
Сопоставление индексов:
{
"mappings": {
"properties": {
"subjectPropertyFields": {
"type": "nested"
}
}
}
}
Индексировать данные:
{
"Id": 1,
"subjectPropertyFields": [
{
"value": "xyz",
"key": "zzz"
}
]
}
{
"Id": 2
}
{
"Id": 3
}
Поисковый запрос:
{
"query": {
"bool": {
"must_not": [
{
"nested": {
"path": "subjectPropertyFields",
"query": {
"bool": {
"filter": {
"exists": {
"field": "subjectPropertyFields"
}
}
}
}
}
}
]
}
}
}
Результат поиска:
"hits": [
{
"_index": "65047473",
"_type": "_doc",
"_id": "2",
"_score": 0.0,
"_source": {
"Id": 2
}
},
{
"_index": "65047473",
"_type": "_doc",
"_id": "3",
"_score": 0.0,
"_source": {
"Id": 3
}
}
]
Комментарии:
1. @Ajay Kumar пожалуйста, ознакомьтесь с моим ответом и дайте мне знать, решит ли это вашу проблему?
2. @Ajay Kumar спасибо, что приняли ответ, не могли бы вы также проголосовать за ответ 🙂
3. спасибо, можете ли вы помочь мне с запросом, если мне нужно добавить дополнительный запрос типа isdata = true и существующую логику запроса для него.
4. @AjayKumar вы можете использовать комбинацию bool query (с предложением match) для того же, и было бы лучше, если бы вы могли задать отдельный вопрос для того же самого с вашими новыми требованиями 🙂
5. @AjayKumar существует ли в вашем документе поле с именем
isdata
?