如何提升基于另一个领域的 Elasticsearch 结果?

How to boost Elasticsearch results based on another field?

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

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

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

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

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

我可以把这个和我的应用联系起来,它类似于Whosebug,它由问题和答案组成,对于一个问题,有主题、正文、标签等。

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

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

我们使用的ES查询:

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

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

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