Elasticsearch使用一种名为“TF-IDF”的算法来对文本进行权重排序,它基于词频和逆文档频率的概念。具体来说,它会考虑一个词在文档中出现的频率(词频)以及在整个文档集中出现的频率(逆文档频率),并计算出一个特定查询中每个词项的得分。得分越高的文档将排名越高。
在Elasticsearch中,可以使用查询DSL语句来控制查询的相关性得分。可以使用match
查询和multi_match
查询来指定查询的关键词和搜索字段,还可以使用boost
参数来增加某些查询条件的重要性。例如,可以使用以下查询DSL语句来搜索标题和正文包含“Elasticsearch”的文档,并将标题的相关性得分提高3倍:
{
"query": {
"multi_match": {
"query": "Elasticsearch",
"fields": ["title^3", "content"]
}
}
}
当搜索结果返回时,可以使用高亮显示来突出显示查询中匹配的关键词。可以使用highlight
参数来指定需要高亮显示的字段和高亮显示的格式。例如,以下查询DSL语句将搜索标题和正文包含“Elasticsearch”的文档,并在标题和正文中高亮显示匹配的关键词:
{
"query": {
"multi_match": {
"query": "Elasticsearch",
"fields": ["title^3", "content"]
}
},
"highlight": {
"fields": {
"title": {},
"content": {}
}
}
}
在返回的结果中,匹配的关键词将被包裹在指定的高亮颜色中。