Elastic更新文档几个小记录
1、max_result_window
默认Elastic 最大返回结果大小10000,当查询的结果大于10000时,返回的也是10000.
from+size<=10000
1.1、分页时,有时报异常illegal_argument_exception
Result window is too large, from + size must be less than or equal to: [10000] but was [10001]
这是from+size大于指定的max_result_window了
GET /zx-broker/_search
{
"query": {
"match_all": {}
},
"size": 9901,
"from": 100
}
1.2、动态更新索引 max_result_window
PUT /zx-broker/_settings
{
"max_result_window":10005
}
1.3、创建索引时指定 max_result_window
PUT /zx-broker-20201231-1
{
"aliases": {
"zx-broker": {
}
},
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1,
"index.analysis.analyzer.default.type": "ik_max_word",
"index.max_result_window":10005
},
"mappings": {
}
}
2、track_total_hits 追踪所有
Elastic 默认查找时,如果查询结果大于10000
时,只返回10000总数,实际查询具体结果是多少不知道。
GET /zx-housecomment/_search
{
"query": {
"match_all": {}
}
}
#返回结果如下,不知道具体多少个匹配
"hits" : {
"total" : {
"value" : 10000,
"relation" : "gte"
}
track_total_hits 返回具体查询数量
GET /zx-housecomment/_search
{
"query": {
"match_all": {}
},
"track_total_hits": true
}
3、track_scores 强制score打分
有时查询时没有match、只有range、term等查询条件,或有排序时,Elastic默认是不会score打分的,但是有时我们也必须要获取这个score分数,可以添加track_scores
强制打分
GET /zx-broker/_search
{
"track_scores":true,
"query": {
"term": {
"brokerId": {
"value": "13187"
}
}
},
"sort": [
{
"rankValue": {
"order": "desc"
}
}
],
"size": 10
}
4、refresh_interval 延时刷新
Elastic默认refresh_interval
为1s,当添加文档、修改文档或删除文档后,立刻查询,此次的修改不会看到效果,在1s后查询才会看到。这就是Elastic的延时更新问题。有时业务需要在修改后,会立刻查询出修改后的结果,此时就对这个修改添加?refresh=wait_for
参数,等待此次修改完刷新数据后返回修改结果。
4.1、创建索引时可指定refresh_interval
“settings”:{“index.refresh_interval”:“1s”}
4.2、Java 查询时指定
//设置refresh 策略
UpdateRequest updateRequest = new UpdateRequest(index, id);
updateRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL);
//根据查询条件删除时,设置refresh=true
DeleteByQueryRequest deleteRequest = new DeleteByQueryRequest(index);
deleteRequest.setRefresh(refresh);
4.3、参考资料
Elasticsearch 删除数据出现“延迟”
refresh_interval属性是-1,意思是不刷新,一般不使用。
在index后有一个refresh_interval默认1秒,在这个时间间隔内search是不可见的。
解决办法有两种:
1,通过ui层解决。操作成功后只操作UI,而不是通过ES。
2,搜索时加上?refresh=wait_for,表示如果1秒内有请求立即更新并可见。
https://www.elastic.co/guide/en/elasticsearch/reference/5.0/docs-refresh.html#docs-refresh
https://www.letianbiji.com/elasticsearch/es7-refresh-interval.html
https://www.cnblogs.com/smile361/p/7483561.html
https://elasticsearch.cn/question/7456