elasticsearch有没有一种方法来提高出现在文档中的确切短语的重要性?elasticsearch增强精确词组匹配的重要性
例如,如果我正在搜索短语“网络开发人员”,并且“网络开发人员”这两个词出现在一起,那么与在整个文档中分别出现的“网络”和“开发人员”相比,他们会增加5。因此,任何包含“网络开发人员”的文档将在结果中首先出现。
elasticsearch有没有一种方法来提高出现在文档中的确切短语的重要性?elasticsearch增强精确词组匹配的重要性
例如,如果我正在搜索短语“网络开发人员”,并且“网络开发人员”这两个词出现在一起,那么与在整个文档中分别出现的“网络”和“开发人员”相比,他们会增加5。因此,任何包含“网络开发人员”的文档将在结果中首先出现。
您可以使用bool query将不同的查询组合在一起,您也可以对它们进行不同的提升。假设您对这两个术语都有一个常规的match query,而不管它们的位置如何,然后是一个带有较高提升的短语查询。
像下面的内容:
{
"query": {
"bool": {
"should": [
{
"match": {
"field": "web developer"
}
},
{
"match_phrase": {
"field": "web developer",
"boost": 5
}
}
],
"minimum_number_should_match": 1
}
}
}
作为替代javanna的回答,你可以做一个bool
查询中与must
和should
条款类似的东西:
{
"query": {
"bool": {
"must": {
"match": {
"field": "web developer",
"operator": "and"
}
},
"should": {
"match_phrase": {
"field": "web developer"
}
}
}
}
}
未测试,但我相信这里的must
子句将匹配包含的结果'web'和'devel操作符“和should
子句将得分更高的匹配”Web开发者“的短语。
是的,这确实与其中的web开发者的文档具有更高的相关性,但OP想要控制相对重要性(使用数字“5”)。例如,也许在极少数情况下,一个带有大量令牌'web'和'developer'的文档可能会用一个'web开发人员'击败一个文档。 有了这个答案,你同样重视这两个查询([ref](https://www.elastic.co/guide/en/elasticsearch/guide/current/bool-query.html#_score_calculation))。 – Garrett
我使用下面的示例查询在我的情况正在工作。它带来了精确+模糊的结果,但确切的结果会被提升!
{ "query": {
"bool": {
"should": [
{
"match": {
"name": "pala"
}
},
{
"fuzzy": {
"name": "pala"
}
}
]
}}}
我认为它的默认行为已经与匹配查询“或”运算符。它会首先过滤短语“web开发者”,然后再使用术语“web”或“develeper”。虽然你可以使用上面的答案来提高你的查询。如我错了请纠正我。
您可以尝试使用rescore在初始结果上运行精确的词组匹配。从文档:
“重新分类可以帮助提高精度,方法是使用次要(通常成本更高)的算法重新排序查询和post_filter阶段返回的顶级(例如100-500)文档,而不是应用代价高昂的算法到索引中的所有文档。“
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-rescore.html
但会发生什么,当我想在多个指标和不同的字段集合进行这样的查询?据我所知match_phrase只适用于特定的字段名称。在我的情况下,我需要(一般来说)使用类似于“{”query_string“:{”query“:”我的确切短语“,”fields“:[”typeA.fieldA“,”typeB.fieldB“]}}' – leandroico