elasticsearch 有没有办法提高文档中出现的确切短语的重要性?
例如,如果我正在搜索短语“web developer”,并且如果“web developer”这两个词一起出现,那么与在整个文档中分别出现的“web”和“developer”相比,它们将被提升 5。因此,任何包含“web developer”的文档都将首先出现在结果中。
elasticsearch 有没有办法提高文档中出现的确切短语的重要性?
例如,如果我正在搜索短语“web developer”,并且如果“web developer”这两个词一起出现,那么与在整个文档中分别出现的“web”和“developer”相比,它们将被提升 5。因此,任何包含“web developer”的文档都将首先出现在结果中。
您可以使用bool query将不同的查询组合在一起,也可以对它们进行不同的提升。假设您有两个术语的常规匹配查询,无论它们的位置如何,然后是具有更高提升的短语查询。
类似于以下内容:
{
"query": {
"bool": {
"should": [
{
"match": {
"field": "web developer"
}
},
{
"match_phrase": {
"field": "web developer",
"boost": 5
}
}
],
"minimum_number_should_match": 1
}
}
}
作为javanna答案的替代方案,您可以在查询中使用must
andshould
子句执行类似的操作:bool
{
"query": {
"bool": {
"must": {
"match": {
"field": "web developer",
"operator": "and"
}
},
"should": {
"match_phrase": {
"field": "web developer"
}
}
}
}
}
未经测试,但我相信must
这里的子句将匹配包含“ web”和“developer”的结果,并且该should
子句将匹配“web developer”的短语得分更高。
您可以尝试使用 rescore 对您的初始结果运行完全匹配的词组。从文档:
“重新评分可以帮助提高精度,方法是仅对查询和 post_filter 阶段返回的顶部(例如 100 - 500 个)文档进行重新排序,使用次要(通常成本更高)算法,而不是将成本高昂的算法应用于索引中的所有文档。 "
https://www.elastic.co/guide/en/elasticsearch/reference/current/filter-search-results.html#rescore
我在我的情况下使用了下面的示例查询,它正在工作。它带来了精确 + 模糊的结果,但精确的结果得到了提升!
{ "query": {
"bool": {
"should": [
{
"match": {
"name": "pala"
}
},
{
"fuzzy": {
"name": "pala"
}
}
]
}}}
我认为它的默认行为已经与匹配查询“或”运算符一起使用。它将首先过滤短语“web developer”,然后过滤诸如“web”或“develeper”之类的术语。尽管您可以使用上述答案来提升您的查询。如我错了请纠正我。
我没有足够的声誉来评论James Adison 的回答,我同意。仍然缺少的是增强因子,可以使用以下语法来完成:
{
"match_phrase":
{
"fieldName": {
"query": "query string for exact match",
"boost": 10
}
}
}