Безболезненный скрипт с Spring Data Elasticsearch - PullRequest
0 голосов
/ 07 ноября 2019

Мы используем Spring Data Elasticsearch для создания фида пользовательского контента с разметкой. Нашей первой попыткой в ​​настоящее время является показ контента на основе соответствия ключевых слов и последнего контента с использованием NativeSearchQueryBuilder.

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

Можно ли выполнить этот заказ при помощи NativeSearchQueryBuilder или мы можем получить больше контроля с помощью безболезненного сценария? Если это безболезненный сценарий, можем ли мы вызвать его из Spring Data ElasticSearch?

Любые примеры, рекомендации будут приветствоваться.

1 Ответ

0 голосов
/ 12 ноября 2019

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

Если данные, для которых вы хотите изменить порядок, являются частью ваших проиндексированных данных (например, полей документа), вы можете использовать QueryDSL , чтобы boost поле _score, несколько вариантов, о которых я могу подумать:

  1. boost поисковый запрос, зависящий от его критериев: пользователь ищет трехкомнатную квартируно 4x комната по той же цене будет намного лучше, тогда мы можем: { "range": { "rooms": { "gte": 4, "boost": 1 }}}
  2. field-value-factor вы можете отдать предпочтение результатам по его значению поля: больше «щелчков» попользователи, больше лайков и т. д.,
  3. random-Score , если вы хотите, чтобы результаты были случайными: разные результаты каждый раз, когда пользователь обновляет вашу страницу, или вы можете смешивать с существующими оценками.
  4. веселье на разложениеctions (Gauss!), чтобы увеличить / уменьшить результаты, которые близки / далеки от нашей центральной точки. Допустим, мы хотим искать квартиры, и наш бюджет установлен в 1700. { "gauss": { "price": { "origin": "1700", "scale": "300" } } } даст нам ощущение того, насколько мы близки к нашему бюджету в 1700. любая квартира с гораздо более высокими ценами (скажем, 2300) - будет гораздо более наказана функцией гаусса - поскольку она далека от нашего происхождения. затухание и поведение функции Гаусса - разделит наши результаты в соответствии с нашим происхождением.

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

...