Я настроил реализацию Elastic Search для передачи результатов по идентификатору в сопоставлении, и когда я показываю этот фасет пользователю, мне нужно показать отображаемое человеком имя, которое его представляет. Данные, которые мне нужны, все присутствуют в сопоставлении, но я не уверен, как я могу вернуть его как часть грани. Неужели это возможно?
В следующем примере я хотел бы, чтобы фасет дал мне способ сопоставить thingId
to thingName
(или любое другое свойство thing
, которое может потребоваться):
Mapping
{
thingId,
thingName
}
Запрос Facet
{
"facets":{
"things":{ "terms":{ "field":"thingId" } }
}
}
Результат
{
"hits":{
"total":3,
"max_score":1.0,
"hits":[
...
]
},
"facets":{
"things":{
"_type":"terms",
"missing":0,
"total":3,
"other":0,
"terms":[
{
"term":"5",
"count":1
},
{
"term":"4",
"count":1
},
{
"term":"2",
"count":1
}
]
}
}
}
Edit
Этот ответ, касающийся Solr, говорит о том, что я охарактеризую оба свойства (thingName
и thingId
), а затем просто перебираю оба набора результатов фасет, считая, что порядок предметов будет одинаковой. Я не знаю, насколько это надежно, но это вариант.
Изменить 2
Этот ответ предполагает, что невозможно выполнить то, что я хочу, не объединяя два поля в одно значение и огранку на этом: thingId|thingName
. Не идеально.
Изменить 3
Этот ответ предлагает объединить значения вместе в одно поле и огранку на нем (как указано выше), но для достижения комбинации использует термины script поэтому мне не нужно индексировать комбинированную форму значений. Все еще не идеальный, но, по-видимому, самый дрянной вариант.