ES学习(十)
一、相关度评分(TF(term frenquency)/IDF(inverse document frequency)算法)
A、Term Frequency: 搜索出现次数越多越相关
B、Inverse document frequency: 搜索文本中的各个词条在整个索引的文档中出现了多少次,出现的次数越多,就越不相关
C、Field-Length:field越短,越相关
二、Bouncing Result问题
A、两个document排序,field值相同;不同的shard上,可能排序不同;每次请求轮询打到不同的shard上,每次页面看到的排序就不同。
解决:将preference设置一个字符串,比如user_id,这样的话可以让同一个user对应到一个shard上去
B、preference取值:_primary, _primary_first, _local, _only_node:xyz, _prefer_node:xyz, _shards:2,3
三、Scroll搜索
A、POST /ecommerce/_search?scroll=1m
{
"size":2
}
POST /_search/scroll
{
"scroll":"1m",
"scroll_id":"DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAYj0WMjQwTVVrN2tUY3VBTDIyZ1lkakFRQQ=="
}
B、和分页区别
分页主要是用来一页一页搜索给用户看;scroll是用来一批一批检索数据给系统处理
四、setting
PUT /test_analyzer
{
"settings": {
"number_of_replicas": 1,
"number_of_shards": 1,
"analysis": {
"analyzer": {
"es_std":{
"type":"standard",
"stopwords":"_english_"
}
}
}
}
}
四、dynamic
A、策略
1. true:遇到陌生字段就进行dynamic mapping
2. false:遇到陌生字段就忽略
3. strict:遇到陌生字段就报错
B、"date_detection": false 时间类型探测
五、零停机重建索引
A、建立别名:PUT /twitter/_alias/alias1
B、从旧索引scroll查询出所有数据导入新建索引
C、将别名切换到新索引(更新别名操作,删除旧的,添加新的)