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

时间:2015-03-10 12:55:55

标签: search elasticsearch search-engine

我正在使用ElasticSearch构建电子商务搜索引擎,例如nexttag.comthefind.com

有一些项目如:

  
      
  1. iPhone 6手机壳 - iPhone 6钱包保护套,iPhone 6皮套,翻盖钱包皮套保护套,带信用卡夹,适用于Apple iPhone 6 4.7''黑色
  2.   
  3. iPhone 6/6 Plus快速入门指南:(适用于iPhone 4s,iPhone 5,iPhone 5s和iPhone 5c,iPhone 6,iPhone 6 +
  4.   
  5. iPhone 6手机壳,iPhone 6(4.7)翻盖保护套[混合系列] [钱包] - 适用于iPhone 6的皮套(4.7) - Kick Stand(PULPC-G-001)iPhone 6(4.7英寸)棕色
  6.   
  7. Apple iPhone 6,Gold,16 GB(未锁定)
  8.   

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

1 个答案:

答案 0 :(得分:2)

我建议您使用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