ElasticSearch Nest Boolean Query, производящий различные оценки - PullRequest
0 голосов
/ 14 февраля 2019

Я делаю проверку концепции для клиента и в настоящее время выполняю несколько простых запросов, чтобы помочь в этом подтверждении концепции.

Я делаю очень простой логический запрос, который должен произвестита же оценка для всех документов, так как она находится только в одном поле, но она дает различную оценку.

Запрос ниже

var response = client.Search<TblRace>(s => s
                     .Query(q => q
                     .Bool(b => b
                     .Must(
                             m => m.Term(t => t.Field(f => f.Handicap).Value(true)))
                          )
                          )
                    .Take(300)
                    .Explain()
               );

Я знаю, что предложение будет, если вы хотите последовательную оценку таким образомиспользовать фильтр, но это всего лишь упрощенный способ проверки того, как производится оценка.

Мое окончательное доказательство концепции будет на самом деле смотреть на поле «Гандикап» и увеличивать его, если оно верно, но все равно включать его, еслиэто ложно.

В конечном итоге у меня будет множество полей, которые действуют таким образом, чтобы создать ранжированную систему, основанную на множестве логических входов, где она повышается, если она соответствует предпочтениям пользователя, но все равно будет включать результаты, еслиэто не так.

Вопрос в том, почему я получаю непоследовательные оценки?Я пытался изучить результаты объяснения, но они ничего не значат для меня, чтобы я их понял.

1 Ответ

0 голосов
/ 14 февраля 2019

Я понял, что это связано с шардингом.

Индексы хранятся в нескольких шардах и отвечают за их собственную оценку.

Вполне возможно, чтомоего небольшого набора данных, который я загрузил (200 записей), недостаточно для получения согласованной оценки.

3 возможных ответа:

  1. Увеличение количества проиндексированных документов
  2. Использовать .SearchType (SearchType.DfsQueryThenFetch) - это выполняет начальный запрос, затем объединяет результаты и стандартизирует оценку
  3. Устанавливает максимальное количество осколков равным 1 при создании индекса.Это применимо, только если вы планируете использовать только небольшой набор данных, поскольку это замедляет запрос
...