记使用ElasticSearch遇到的一些问题

1.使用elasticsearch做分页查询时,当查询记录超过10000时报错

原因:
因为es数据是存储在不同分片上的,假设取的页数较大时(深分页),像是请求第 20 页,es 不得不取出所有分片上的第 1 页到第 20 页的所有文档,并做排序,最终再取出结果。假设你有 16 个分片,则需要处理 16 * (20 + 10) 条记录后做一次全局排序,而当索引非常非常大(千万或亿)时,会非常消耗 CPU 和内存资源,所以为了保护机器,es使用 index.max_result_window:10000 这个设定作为保护措施 。

解决办法:修改最大限制

PUT articles/_settings
{ 
    "index" : { 
        "max_result_window" : 20000
    }
}

但这种方法只是暂时解决问题,当数据量越来越大,分页也越来越深,还是会出问题的,业务上尽量避免这种情况,一般也没有需要翻页这么深的需求。

2.报错 startOffset must be non-negative, and endOffset must be u003e= startOffset, and offsets must not go backwards startOffset=2538,endOffset=2539,lastStartOffset=2539 for field ‘content’

原因:这应该是ik分词器的一个bug

解决办法:
1.可以试试更新到新版。
2.因为我们使用的是阿里云的,找他们咨询之后,他们让我们重新启动es,重启之后问题就解决了。

后端技术服务器开发

【elasticsearch】ES数据库重建索引 -- Reindex(数据迁移)

2022-6-7 10:31:49

golang后端技术

golang 单向 chan类型

2022-6-8 15:34:16

搜索