提升结果匹配术语查询,而无需在elasticsearch中进行过滤

时间:2015-07-31 09:01:19

标签: elasticsearch tags relevance

上下文:我对ElasticSearch比较新,所以也许我缺少一个概念。

我想提高具有一个或多个标签的文档的相关性得分(标签越多,得分越高),而不会过滤掉没有任何标签的文档。

尝试解决方案:

我尝试使用术语查询:

{
  "query": {
    "terms": {
      tags: ['some','tags','to','boost'],
      minimum_should_match: 0
    }
  }
}

minimum_should_match选项似乎被忽略了(文档对此不太清楚,但我认为这个选项必须与零不同)。

我还尝试使用bool should的{​​{1}}查询“作弊”:

match_all

但由于某些原因,没有任何标签的结果无论如何都会被过滤掉。

我还尝试使用{ "query": { "bool": { "should" : [ {"terms": {tags: ['some','tags','to','boost']}}, {"match_all": {}} ] } } } function_score,但无法找出保留术语查询生成的相关性得分的有效语法。

修改:

“bool作弊”的精神似乎有一个有效的解决方案:

boosting_query

但是:

  • 这感觉很乱,
  • 我不知道如何精确控制本案例中产生的相关性

问题:我认为这必须是一个常见且简单的用例,那么有没有一种方法可以使用术语查询而不会过滤掉不匹配的文档?

1 个答案:

答案 0 :(得分:0)

即使这样也可以解决您的问题:

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-boosting-query.html

您可以使用 @SpringBootApplication 的负提升。