![7db362e8fadbf342fce4b36d9278851c.png](https://i-blog.csdnimg.cn/blog_migrate/238a0fef612c63d584d69857036b558e.png)
在前面的课程中,通过搭建ELK相关的中间件,以及配置动态mapping结构用于存储我们需要检索的文档信息;
我们通过输入关键词进行分词检索然后ES默认通过评分的形式将数据排序好展示给我们,当文档评分越高,那么搜索的结果越靠前;如下图所示,我们通过百度搜索关键字"兔子李磊"得到的搜索结果
![46f14029142f6ccab3b1649d32e66a06.png](https://i-blog.csdnimg.cn/blog_migrate/9b2be77fccc88b09f326c11ddd2a39b7.jpeg)
可以看到,在上述搜索结果中,可以看到第一条记录中,由于兔子 和 李磊 两个关键词都出现了,排名相对靠前一点;我们暂时可以理解为上述第一条文章的搜索结果相对搜索评分较高,相关度较高;
上述的理论基于一些自我逻辑,那么在ES中,我们搜索的相关度评分,又是如何计算出来的呢;
我们通过ES的复合框搜索语句到结果展示,其展示规则默认就是根据相关度进行排序的,即默认根据score排序;
查询ES的执行计划
执行计划查询方式如下:
GET shopping/_search
{
"explain": true,
"query": {
"match": {
"goodsInfoName": "苏泊尔"
}
}
}
在上述DSL语句中,开启explain即可开启ES的查询计划(类似于Mysql数据库的执行计划);
上述DSL语句在我本地的查询结果如下:
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 3,
"successful" : 3,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 24,
"relation" : "eq"
},
"max_score" : 5.3067513,
"hits" : [
{
"_shard" : "[shopping][1]",
"_node" : "h665-yAdSzGgjxamBh5CjA",
"_index" : "shopping",
"_type" : "_doc",
"_id" : "10976",
"_score" : 5.3067513,
"_source" : {
"goodsInfoName" : "苏泊尔不锈钢压力锅高压锅YS22ED+苏泊尔保鲜盒饭盒便当盒330mlKB033AE1(银色)",
"其他字段省略....."
},
"_explanation" : {
"value" : 5.3067513,
"description" : "weight(goodsInfoName:苏泊尔 in 328) [PerFieldSimilarity], result of:",
"details" : [
{
"value" : 5.3067513,