如何在ElasticSearch查询结果中将最匹配项置于顶部

我正在使用ElasticSearch来构建像
nexttag.com
thefind.com这样的电子商务搜索引擎.

有一些项目如:

  1. iPhone 6 Case – iPhone 6 Wallet Case , iPhone 6 Leather Case ,Flip Wallet Leather Case Cover with Credit Card Holder For Apple iPhone 6 4.7” Black
  2. iPhone 6 / 6 Plus Quick Starter Guide: (For iPhone 4s, iPhone 5, iPhone 5s, and iPhone 5c, iPhone 6, iPhone 6+
  3. iPhone 6 Case, iPhone 6 (4.7) Flip Case [Hybrid Series] [Wallet] – Leather Case for iPhone 6 (4.7) – Kick Stand (PULPC-G-001)iPhone 6(4.7in) Brown
  4. Apple iPhone 6, Gold, 16 GB (Unlocked)

当我们查询“iPhone 6”时,如何将“Apple iPhone”置于顶部,或者不是“iPhone外壳”或“iPhone快速指南”.

最佳答案 我建议你使用elasticsearch提供的功能评分查询功能. function_score允许您修改查询检索的文档的分数.

简而言之,您通过使用您提供的自定义函数(或更多函数)修改每个文档的分数,在搜索结果上添加一些后期处理.

您有各种选项来实现评分功能,您的选择应取决于您的具体情况.

例如,我可以建议你使用field_value_factor函数,它允许你使用文档中的字段来影响分数.这意味着您应该在文档中索引提升因子(例如,在每个文档中添加“boost_factor”字段,并将其值设置为1.5,对于手机,1.0为案例或其他任何内容).这样做的缺点是,您需要在实际数据中包含增强功能,并且将来的更改需要重新编制数据索引.

在这种情况下,功能将是

field_value_factor": {
  "field": "boost_factor",
  "factor": 1.0,
  "modifier": "none"
}

这将转换为以下评分公式:

1.0 * doc['popularity'].value

有关详细信息,请在官方文档中查看:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#query-dsl-function-score-query

点赞