Я разрабатываю новый API поиска с AWS Elasticsearch (версия 6.2) в качестве бэкэнда.
Сейчас я пытаюсь поддерживать параметры сортировки для API.
Мое сопоставление выглядит следующим образом (несвязанные поля не включены):
{
"properties": {
"id": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
},
"description": {
"type": "text"
},
"materialDefinitionProperties": {
"type": "nested",
"properties": {
"id": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
},
"analyzer": "case_sensitive_analyzer"
},
"value" : {
"type": "nested",
"properties": {
"valueString": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
}
}
}
}
}
}
Я пытаюсь разрешить пользователям сортировать по значению свойства (путь: materialDefinitionProperties.value.valueLong.raw
).
Обратите внимание, что он находится внутри 2-х уровней вложенных объектов (materialDefinitionProperties и materialDefinitionProperties.value являются вложенными объектами).
Чтобы отсортировать результаты по значению свойства с идентификатором «PART NUMBER», мой запросдля сортировки:
{
"fieldName": "materialDefinitionProperties.value.valueString.raw",
"nestedSort": {
"path": "materialDefinitionProperties",
"filter": {
"fieldName": "materialDefinitionProperties.id",
"value": "PART NUMBER",
"slop": 0,
"boost": 1
},
"nestedSort": {
"path": "materialDefinitionProperties.value"
}
},
"order": "ASC"
}
Однако, как я изучил ответ, поле «сортировка» не соответствует значению свойства документа:
{
"_index": "material-definition-index-v2",
"_type": "default",
"_id": "development_LITL4ZCNE",
"_source": {
"id": "LITL4ZCNE",
"description": [
"CPU, Intel, Cascade Lake, 8259CL, 24C, 210W, B1 Prod"
]
"materialDefinitionProperties": [
{
"id": "PART NUMBER",
"description": [],
"value": [
{
"valueString": "202-001193-001",
"isOriginal": true
}
]
}
]
},
"sort": [
"100-000018"
]
},
Свойство PART NUMBER документа равно "202-001193-001 ", в поле« сортировка »указано« 100-000018 », что является номером детали другого документа.
Кажется, что есть несоответствие между основным документом и вложенным объектом, используемым для сортировки.
Этот запрос хорошо работал, когда в кластере только небольшое количество документов.Но как только я засыпаю кластер ~ 1 миллионом записей, появляется симптом.Я также пытался создать новый кластер ES, но результаты те же.
Сортировка по другим не вложенным атрибутам работала хорошо.
Я неправильно понял концепцию вложенных объектов или неправильно использовал функцию вложенной сортировки?
Любые идеи приветствуются!