Кластеризированная оценка в ElasticSearch - PullRequest
0 голосов
/ 05 сентября 2018

Допустим, я получил какой-то сложный запрос в ElasticSearch 6.2, и он может возвращать следующие хиты:

"hits" : [
  {
    ...
    "_score" : 100,
    "_source" : { ... }
    ...
  },
  {
    ...
    "_score" : 99,
    "_source" : { ... }
    ...
  },
  {
    ...
    "_score" : 50,
    "_source" : { ... }
    ...
  },
  {
    ...
    "_score" : 49,
    "_source" : { ... }
    ...
  }
]

Или тот же запрос может вернуть:

"hits" : [
  {
    ...
    "_score" : 10,
    "_source" : { ... }
    ...
  },
  {
    ...
    "_score" : 9.9,
    "_source" : { ... }
    ...
  },
  {
    ...
    "_score" : 2,
    "_source" : { ... }
    ...
  },
  {
    ...
    "_score" : 1,
    "_source" : { ... }
    ...
  }
]

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

1 Ответ

0 голосов
/ 05 сентября 2018

Насколько я знаю, Elasticsearch не предоставляет способ отсекать некоторые попадания, основываясь на относительном балле. Для этого вы должны заранее знать максимальную оценку, которая может сильно отличаться в зависимости от самого поискового запроса и текущего состояния индекса. Один не очень элегантный способ добиться этого - получить максимальную оценку из первого запроса, которая ограничивает размер результатов одним, а затем использовать относительный min_score во втором запросе, чтобы отфильтровать результаты. С другой стороны, того же можно достичь, отфильтровывая результаты обычного запроса вручную на стороне клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...