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" для этого поля в вашем отображении.

Другие вопросы по тегам