搜索结果分析:
{
"took":1,
"timed_out":false,
"_shards":{
"total":17,
"successful":17,
"skipped":0,
"failed":0
},
"hits":{
"total":13781,
"max_score":1,
"hits":[
{
"_index":".kibana",
"_type":"config",
"_id":"5.6.4",
"_score":1,
"_source":{
"buildNum":15571,
"defaultIndex":null
}
}
]
}
}
took:搜索花费多少毫秒
hits.total:几条结果
hits.max_source:最大相关度分数是多少,每条document对于search的相关度,_source分数越大,排位越靠前
hits.hits:默认查询前10条数据,完整数据,_source降序排序
shards:shards fail条件(primary和replica全部挂掉),不影响其他shard
timeout:默认无timeout,latency平衡
可根据用户指定的timeout返回数据(可能部分,可能全部返回),而不是等到拿到所有数据(可能要1分钟)
语法:
GET /_search?timeout=10ms
相关度计算的算法分析:
relevance score算法:计算出一个索引中的文本,他们之间的关联匹配程度
es使用的是term frequency/inverse document frequency算法,简称TF/IDF算法
1、Term frequency:
搜索文本中的各个词条在field文本中出现了多少次,出现次数越多,就越相关
例如:
搜索hello world
doc1:hello you,and world is wonderful.
doc2:hello,how are you.
2、Inverse document frequency:
搜索文本中的各个词条在整个索引的所有文档中出现了多少次,出现次数越多,越不相关。
搜索hello world
doc1:hello,today is very good.
doc2:hi world,how are you.
搜索的时候,要靠倒排索引,排序时,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,就是doc values
在建立索引的时候,一方面建立倒排索引,一方面建立正排索引,供排序,聚合,过滤等操作使用
doc values是被保存在磁盘上的,此时如果内存足够,os会自动将其缓存在内存中,性能还是会很高,如果内存不够,os会将其写入磁盘。