Elasticsearch аспект фасет против лейбла
Индексируемый объект имеет свойство UserId (GUID) и свойство FullName. Я хотел бы выполнить фасетный поиск с использованием UserId, но отобразить полное имя, чтобы его можно было прочитать. Я не хочу делать фасет на FullName, поскольку технически он не должен быть уникальным.
Прямо сейчас я делаю что-то вроде этого:
{
"query": {
"match_all": {}
},
"facets": {
"userFacet": {
"terms": {
"field": "userId"
}
}
}
}
Но затем он дает мне гиды в ответе, которые мне понадобятся, чтобы попасть в базу данных, чтобы найти полное имя, что, очевидно, не является реальным решением.
Итак, как я могу использовать одно поле для фасетов, а затем другое поле для отображаемых значений?
2 ответа
Я использую нижнюю строку для отображения полей. Он работает только для сеток, но не для граней. Тем не менее, фасет берет с удостоверения личности только не ярлык.
fields: [{
id: 'name_first',
'label': 'First Name'
}]
Попробуйте добавить fields
пункт к вашему запросу, следующим образом:
{
"query": {
"match_all": {}
},
"facets": {
"userFacet": {
"terms": {
"field": "userId"
}
}
},
"fields": [ "FullName" ]
}
Обратите внимание, что для того, чтобы возвращать значения полей в результатах поиска, вам необходимо сохранить их в ES. Так что вам нужно либо хранить _source
(это происходит по умолчанию, если вы не переопределите его "_source" : {"enabled" : false}
или установить "store": "yes"
для этого поля в вашем отображении.