【问题标题】:How to boost Elasticsearch results based on another field?如何基于另一个领域提升 Elasticsearch 结果?
【发布时间】:2019-11-12 12:03:20
【问题描述】:

有点简单的用例,但无法提出好的解决方案。

基本上我有两个索引字段:内容和关键字(关键字标记器),其中内容是一个长文本字段,关键字包含该内容中的重要术语。当我查询一些长文本时,我必须根据匹配文档中存在的关键字来提升这些结果。

我尝试在内容和关键字字段上查询完整的文本,但速度太慢,或者对于超过 40 个字的文本会引发 too_many_clauses 错误。

{"query": {
    "match": {
      "keywords": {
        "query": "some long text",
        "analyzer": "custom_analyzer"
      }
    }
  }}

有没有更好的方法?渗滤器可以在这里工作吗?

【问题讨论】:

  • match 应该根据您的搜索词带来权重更大的文档。你是说match 没有按预期的方式工作吗?
  • percolator 在这里感觉有点矫枉过正,它被用于推荐或提升搜索,其中一些您想要提升或推荐的文档,无论其 tf/idf 或搜索分数如何。例如,苹果希望将 iPhone11 的帖子宣传为最新的 iphone,而不考虑其搜索得分。
  • 感谢您接受我的回答,如果您也可以投票,那就太好了,TIA。

标签: elasticsearch lucene


【解决方案1】:

我可以将其与我的应用程序相关联,它类似于 Stackoverflow,由问题和答案组成,对于问题,有主题、正文、标签等。

此处的主题与您的关键字索引字段相关,而正文与您的内容索引字段相关。通常主题包含有关帖子的重要关键字,您也是如此。

现在进入解决方案部分, 我们如何通过查询主题和正文索引字段来解决这个问题,但将主题提高 15 倍,这是可配置的。

我们使用的 ES 查询:

{
  "query": {
    "multi_match" : {
      "query" : "this is a test",
      "fields" : [ "subject^15", "message" ] 
    }
  }
}

This ES doc 也有一个类似的例子,他们将 multi_match 查询中的主题字段提高了 3 倍。

如果您有任何问题,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-14
    • 2012-01-12
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多