上下文:我对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
但是:
问题:我认为这必须是一个常见且简单的用例,那么有没有一种方法可以使用术语查询而不会过滤掉不匹配的文档?
答案 0 :(得分:0)
即使这样也可以解决您的问题:
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-boosting-query.html
您可以使用 @SpringBootApplication
的负提升。