#elasticsearch
Вопрос:
Предполагая, что у меня есть документ с тремя полями: name
, company
, email
каждое из которых сопоставлено с edge-ngram
{
"name": "John",
"company": "John's company",
"email": "johndoe@gmail.com"
}
При поиске «джона» я хочу иметь возможность получить оценку каждого поля по отдельности
{
"query": {
"bool": {
"should": [
{ "match": { "name": "john" }},
{ "match": { "company": "john" }},
{ "match": { "email": "john" }}
]
}
}
}
В этом примере оценка по каждому match
предложению складывается вместе, а затем делится на количество match
предложений. Так есть ли в любом случае возможность получить оценку по каждому match
пункту в отдельности, а не только итоговую оценку для всего документа?
Я думаю, что настройка «объяснить»: true также не идеальна, поскольку она предоставляет очень низкоуровневые сведения о подсчете очков (неэффективно и трудно анализировать).
Ответ №1:
Я не могу придумать, как вы могли бы сделать это, не изменяя результаты поиска.
Однако, если бы вы использовали разные повышения для каждого поля, вы могли бы изменить свой подход к определению значения каждого из них. Например, увеличение одного поля на 1, следующего на 10 и последнего на 100, а также изучение конечного числа может дать вам то, что вы ищете, однако поле, увеличенное на 100, будет единственным, что имеет значение.
Любопытно применение этого, так как кажется, что повышение в целом может решить то, что вы ищете.
Комментарии:
1.Я не думаю, что повышение поможет так сильно (поправьте меня, если я ошибаюсь). что я хочу сделать, так это реализовать автозаполнение, в котором я всегда показываю только два поля: первое-
name
поле, а второе-наивысший балл по полю между всеми остальными полями. например, если пользователь искал «джон», я всегда буду показыватьname
поле и выбирать наивысший балл поля междуcompany
phone
website
полями, в зависимости от того, какой из них имеет наивысший балл, будет отображаться вместе сname
полем.2. Мысль состояла в том, чтобы использовать boost в качестве битовой карты, если хотите, чтобы диапазон оценок для каждого поля был перенесен в другой диапазон чисел. например, если a = 1 b=2 c=3, и я хочу сжать это в одно значение, я мог бы использовать x = a*10000 b*100 c, где результат равен 1002003, который я мог бы затем изменить и изменить, используя мои коэффициенты, коэффициенты будут вашими значениями повышения. Я не уверен, что нормализация происходит под счетом, так что это может быть просто невозможно.
3. Это была просто пришедшая мне в голову мысль, которая могла бы быть возможной, поэтому я поделился, определенно неизвестным решением