Spring Data Elasticsearch的无痛脚本

我们正在使用Spring Data Elasticsearch来构建“读取时扇出”用户内容供稿。当前,我们的首次尝试是使用NativeSearchQueryBuilder显示基于关键字匹配的内容和最新内容。

我们希望基于其他因素(例如,用户参与度,用户当前正在从事的工作等)进一步改善显示给用户的相关性顺序。

可以使用NativeSearchQueryBuilder进行此自定义排序,还是可以使用轻松的脚本获得更多控制权?如果这是一个轻松的脚本,我们可以从Spring Data ElasticSearch中调用它吗?

任何示例,都将非常欢迎提出建议。

shao1014 回答:Spring Data Elasticsearch的无痛脚本

Elasticsearch用它relevance-score对结果进行排序(这表明结果与您的搜索查询相关),认为结果集中的每个文档都包含一个数字,该数字表示文档的相关性 >转到给定查询。

如果要更改其顺序的数据是索引数据的一部分(例如,文档字段),则可以使用 QueryDSL ,以boost的_score字段,很少的选项我可以考虑:

  1. boost依赖于此条件的搜索查询:用户搜索价格为3倍的房间,但价格相同的4倍的房间会更好地匹配,那么我们可以:{ "range": { "rooms": { "gte": 4,"boost": 1 }}}
  2. field-value-factor,您可以通过它的字段值来偏向结果:用户更多的“点击”,更多“喜欢”等。
  3. random-score(如果您希望结果随机):与众不同 用户每次刷新您的页面或您可以将其与现有评分混合使用时的结果。
  4. decay functions(高斯!)来增强/增强接近/远离我们中心点的结果。假设我们要搜索公寓,我们的预算设置为1700。{ "gauss": { "price": { "origin": "1700","scale": "300" } } }会让我们感觉到我们与1,700的预算有多接近。价格高得多(例如2,300)的任何公寓-都会受到高斯函数的惩罚-因为它离我们的起源很远。高斯函数的衰减和行为-会将我们的结果与我们的起源相对应。

我认为这对spring-data-es没有任何抽象,我将FunctionScoreQueryBuilder与NativeSearchQueryBuilder一起使用。

本文链接:https://www.f2er.com/3142575.html

大家都在问