【elasticsearch】elasticsearch查询报错问题整理

 


问题一:

1. http_code : 409

2. 报错内容:

Caused by: org.elasticsearch.search.query.QueryPhaseExecutionException: Result window is too large, from + size must be less than or equal to: [20000] but was [83440000]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting. at org.elasticsearch.search.DefaultSearchContext.preProcess(DefaultSearchContext.java:203) ~[elasticsearch-5.6.4.jar:5.6.4] at org.elasticsearch.search.query.QueryPhase.preProcess(QueryPhase.java:95) ~[elasticsearch-5.6.4.jar:5.6.4] at org.elasticsearch.search.SearchService.createContext(SearchService.java:497) ~[elasticsearch-5.6.4.jar:5.6.4] at org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:461) ~[elasticsearch-5.6.4.jar:5.6.4] at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:257) ~[elasticsearch-5.6.4.jar:5.6.4] at org.elasticsearch.action.search.SearchTransportService$6.messageReceived(SearchTransportService.java:343) ~[elasticsearch-5.6.4.jar:5.6.4] at org.elasticsearch.action.search.SearchTransportService$6.messageReceived(SearchTransportService.java:340) ~[elasticsearch-5.6.4.jar:5.6.4] at com.floragunn.searchguard.ssl.transport.SearchGuardSSLRequestHandler.messageReceivedDecorate(SearchGuardSSLRequestHandler.java:178) ~[?:?] at com.floragunn.searchguard.transport.SearchGuardRequestHandler.messageReceivedDecorate(SearchGuardRequestHandler.java:107) ~[?:?] at com.floragunn.searchguard.ssl.transport.SearchGuardSSLRequestHandler.messageReceived(SearchGuardSSLRequestHandler.java:92) ~[?:?] at com.floragunn.searchguard.SearchGuardPlugin$5$1.messageReceived(SearchGuardPlugin.java:493) ~[?:?] at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:69) ~[elasticsearch-5.6.4.jar:5.6.4]

3. 查询语句

source={ "from" : 83438000, "size" : 2000, "query" : { "bool" : { "must" : [ { "range" : { "createTime" : { "from" : 1631807999000, "to" : 1631894399000, "include_lower" : true, "include_upper" : false, "boost" : 1.0 } } } ], "disable_coord" : false, "adjust_pure_negative" : true, "boost" : 1.0 } }, "_source" : { "includes" : [ "companyId", "riskLabel" ], "excludes" : [ ] } }}]

4. 报错原因:

Elasticsearch 查询索引结果时,用于分页的两个属性 from和size。可以使用from和size 参数对结果进行分页。该from参数定义了您要获取的第一个结果的偏移量。该size参数允许您配置要返回的最大命中数。

虽然from和size可以设置为请求参数,但也可以在搜索正文中设置。from默认为0,size 默认为10。

注意,from+size不能超过index.max_result_window 默认为 10,000的索引设置。目前ES集群返回结果最大值为20,000

而业务方却要求83438000行。故ES抛出异常。

参考: https://www.elastic.co/guide/en/elasticsearch/reference/5.1/search-request-from-size.html

并且这种分页也是浅分页,可以理解为简单意义上的分页。它的原理很简单,就是查询前20条数据,然后截断前10条,只返回10-20的数据。这样其实白白浪费了前10条的查询。

并且越往后的分页,执行的效率越低。总体上会随着from的增加,消耗时间也会增加。而且数据量越大,效果越明显!

scroll: 游标查询允许我们 先做查询初始化,然后再批量地拉取结果。 这有点儿像传统数据库中的 cursor 。

游标查询会取某个时间点的快照数据。 查询初始化之后索引上的任何变化会被它忽略。 它通过保存旧的数据文件来实现这个特性,结果就像保留初始化时的索引 视图 一样。

5. 解决方法:

  1. 增大返回结果。
  2. 在不改变业务原意的情况下,建议使用scroll API

问题二:

1. http_code: 500

2. 报错内容:

Caused by: java.lang.IllegalArgumentException: Fielddata is disabled on text fields by default. Set fielddata=true on [order_record_id] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.

3. 查询语句:

{ "from" : 0, "size" : 10, "query" : { "bool" : { "filter" : [ { "bool" : { "must" : [ { "bool" : { "must" : [ { "bool" : { "must" : [ { "script" : { "script" : { "source" : "1 == 1", "lang" : "painless" }, "boost" : 1.0 } } ], "disable_coord" : false, "adjust_pure_negative" : true, "boost" : 1.0 } }, { "range" : { "create_time" : { "from" : 1631894400, "to" : null, "include_lower" : true, "include_upper" : true, "boost" : 1.0 } } }, { "range" : { "create_time" : { "from" : null, "to" : 1631980800, "include_lower" : true, "include_upper" : true, "boost" : 1.0 } } }, { "range" : { "begin_time" : { "from" : null, "to" : 1632002400, "include_lower" : true, "include_upper" : true, "boost" : 1.0 } } }, { "bool" : { "should" : [ { "match_phrase" : { "mis_user_id" : { "query" : 3230, "slop" : 0, "boost" : 1.0 } } }, { "match_phrase" : { "mis_user_id" : { "query" : 505150, "slop" : 0, "boost" : 1.0 } } }, { "match_phrase" : { "mis_user_id" : { "query" : 505150, "slop" : 0, "boost" : 1.0 } } }, { "match_phrase" : { "mis_user_id" : { "query" : 505153, "slop" : 0, "boost" : 1.0 } } }, { "match_phrase" : { "mis_user_id" : { "query" : 505154, "slop" : 0, "boost" : 1.0 } } }, { "match_phrase" : { "mis_user_id" : { "query" : 505155, "slop" : 0, "boost" : 1.0 } } }, { "match_phrase" : { "mis_user_id" : { "query" : 505156, "slop" : 0, "boost" : 1.0 } } }, {"match_phrase" : { "mis_user_id" : { "query" : 2663, "slop" : 0, "boost" : 1.0 } } }, { "match_phrase" : { "mis_user_id" : { "query" : 3216, "slop" : 0, "boost" : 1.0 } } }, { "match_phrase" : { "mis_user_id" : { "query" : 3217, "slop" : 0, "boost" : 1.0 } } } ], "disable_coord" : false, "adjust_pure_negative" : true, "boost" : 1.0 } }, { "bool" : { "should" : [ { "match_phrase" : { "type" : { "query" : 1, "slop" : 0, "boost" : 1.0 } } }, { "match_phrase" : { "type" : { "query" : 12, "slop" : 0, "boost" : 1.0 } } } ], "disable_coord" : false, "adjust_pure_negative" : true, "boost" : 1.0 } } ], "disable_coord" : false, "adjust_pure_negative" : true, "boost" : 1.0 } } ], "disable_coord" : false, "adjust_pure_negative" : true, "boost" : 1.0 } } ], "disable_coord" : false, "adjust_pure_negative" : true, "boost" : 1.0 } }, "_source" : { "includes" : [ "id", "begin_time", "end_time", "mobile", "order_record_id", "product_apply_order_id", "category_id", "product_id", "content", "status", "zifang", "product_detail_id", "user_type", "level1_type", "level2_type", "level3_type", "subteams", "ext_type", "mis_user_id", "name", "call_system", "hotline", "record_id", "create_time", "satisfaction_score", "transfer_queue", "ext_id", "call_start_time", "end_reason" ], "excludes" : [ ] }, "sort" : [ { "order_record_id" : { "order" : "desc" } } ] }}]

4. 问题原因:

order_record_id字段类型为text类型,针对text类型的FIleData默认是禁用的,ElasticSearch无法对类型为text的字段进行聚合查询/排序。

5. 解决方案:

  1. 避免使用text字段,使用keyword 等别的字段进行代替。
  2. 对text字段类型开启filedata属性。(不推荐)

问题三:

http_code

HTTP/1.1 401 Unauthorized

1. 报错内容:

[2021-09-18T12:18:06,243][WARN ][o.e.t.LoggingTaskListener] 75886912359 failed with exception org.elasticsearch.ElasticsearchSecurityException: no permissions for [indices:admin/create] and User [name=sentiment_rw, roles=[]]

2. 报错原因:

sentiment_rw 用户没有写入索引的权限功能。

3. 解决方案:

业务方写入索引时,应检查自己的权限。


问题四:

http_code : 400

1.问题描述:

Caused by: org.elasticsearch.index.query.QueryShardException: failed to create query Caused by: org.elasticsearch.common.io.stream.NotSerializableExceptionWrapper: too_many_clauses: maxClauseCount is set to 1024

2. 问题查询:

该查询特别长,这里只是截取了一点点。

{ "bool" : { "must" : [ { "range" : { "createTime" : { "from" : 1631635199000, "to" : 1631721599000, "include_lower" : true, "include_upper" : false, "boost" : 1.0 } } } ], "must_not" : [ { "term" : { "companyId" : { "value" : "5433f1a77a775684071d5034208a9b21", "boost" : 1.0 } } }, .... ] }

3. 问题原因:

查询sql语句过长,超出lucene的最大子句限制(1024)。

4. 解决方法:

规范查询,尽量在上线前,提前进行测试。


__EOF__

本文作者彬在俊
本文链接https://www.cnblogs.com/erlou96/p/16878246.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   彬在俊  阅读(382)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示