У меня есть индекс с необязательным полем Дата / Время, называемый lastChackoutDate
. Попытка отфильтровать строки по запросу range
или term
возвращает 0 строк, но я знаю, что в некоторых документах есть значение для этого поля. Запрос Mappings возвращает мне ожидаемый ответ:
... ,
"lastCheckoutDate": {
"type": "date"
},
...
Попытка определить, какой запрос может вернуть мне результат, которого я жду, в конечном итоге привела меня к выражению:
{
"from": 0,
"query": {
"bool": {
"filter": [
{
"bool": {
"must_not": [
{
"exists": {
"field": "lastCheckoutDate"
}
}
],
"must": [
{
"nested": {
"path": "nested_path",
"query": {
"term": {
"nested_path.id": {
"value": "some_unique_id"
}
}
}
}
}
]
}
}
]
}
},
"size": 50,
"sort": [
{
"displaySequence": {
"order": "asc"
}
}
]
}
, которое вернуло одна строка с существующим путем / значением:
hits
[0]
_source
lastCheckoutDate: 2020-01-23T00:00:00
explain
этого запроса не пролила свет на детали ответа "существует": ConstantScore (+ ToParentBlockJoinQuery (nested_path.id: some_unique_id) -ConstantScore (_field_names: lastCheckoutDate)), продукт: Так есть ли способы определить, почему поле невидимо для запроса? Это прекрасно работает для тестовой базы данных, которая создается и удаляется каждый раз, но существующее хранилище всегда дает мне 0 совпадений для любого действительного (из моего POV) запроса. Из c я выполнил действие по миграции для существующей базы данных (по крайней мере, каким-то образом отображалась информация для нового поля). В документации Elasti c приведены некоторые примеры того, почему «существующий» запрос может завершиться ошибкой: - Поле в источнике JSON равно нулю или [] - Поле имеет «индекс»: ложно установлено в отображении - Длина значения поля превысила значение параметра ignore_above в отображении - Значение поля было искажено, а ignore_malformed было определено в отображении Но я не уверен, что какой-либо вариант верен для моего случая.