【问题标题】:How can we manually manipulate score field in Elasticsearch我们如何在 Elasticsearch 中手动操作 score 字段
【发布时间】:2017-01-07 00:02:16
【问题描述】:

我正在处理当前的场景,如果有特定的文本搜索,则需要提升少量文档。 场景是,我有一组文档,我必须根据特定关键字进行术语查询,但这里的问题是。假设我们搜索一个关键字测试,它将获取 100 条记录,但要求表明,无论权重和其他标准如何,很少有文档应该始终排在首位。我们如何才能做到这一点是 Elasticsearch,欢迎任何建议和想法。

【问题讨论】:

  • 如果您知道在索引时要提升哪些文档,您可以使用一个字段来标记它们,然后将该字段包含在搜索查询中。另一种方法是,如果您在搜索时有一些标识符,则将其包含在查询中。
  • 你能举一个简单的例子说明你有什么和你期望什么结果吗?
  • @jay 假设当我们使用“test”关键字进行术语查询时,它会返回 1000 个文档。假设我们有 4 个文档,其 id 分别为 1、2、3、4。所以我想要的是每次我用 test 关键字进行术语查询时,这 4 个文档应该作为前 4 个内容出现在顶部结果中。希望我清除了您的查询。

标签: elasticsearch elasticsearch-plugin spring-data-elasticsearch


【解决方案1】:

您可以控制与脚本的相关性。看一眼: https://www.elastic.co/guide/en/elasticsearch/guide/current/script-score.html

这是一个使用 Groovy 的示例:

price  = doc['price'].value 
margin = doc['margin'].value 

if (price < threshold) { 
  return price * margin / target
}
return price * (1 - discount) * margin / target 

所以,在伪代码中它会是这样的:

if (word == 'test') { 
  return score * n
}
return score

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    相关资源
    最近更新 更多