ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Elasticsearch常用错误及如何排查错误

2022-01-07 20:02:22  阅读:378  来源: 互联网

标签:term 10000 错误 索引 查询 排查 Elasticsearch query true


目录


1 可能遇到的问题

一般我的习惯是先写javaAPI再去拿着代码中Debug数据进行排错,有的人喜欢先去写Es的请求然后在对应着javaAPI去写都可以。错误会不断补充建议收藏!

那么遇到的错误一般就是查不到,感觉逻辑很多就是找不到,但是这里的找不到分的种类就多了排查方式如下:

下断点找到对应调用SearchRequest.source将查询条件设置到检索请求
在这里插入图片描述

之后将其代码复制出来如何进行查询
在这里插入图片描述
这是正常操作排错也是按我这个步骤走
在这里插入图片描述

2 Unknown key for a START_OBJECT in [XXXX].

{
    "range": {
        "id": {
            "gte": 3000000000,
            "lte": 4000000000
        }
    },
    "size": 1
}

range 是query中的元素,应该放在query中,不论是什么查询都需要放入query中

{
    "query": {
        "range": {
            "id": {
                "gte": 3000000000,
                "lte": 4000000000
            }
        }
    },
    "size": 1
}

3 TermQuery精确查询失效问题解决

3.1 问题

TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("filename",name);

查询的时候要么就是没有,要么就是结果很奇怪。关于这个debug也debug了,逻辑代码也没啥问题。后来查了很多资料终于找到了解决办法。

3.2 解决办法

将字段的type设置为keyword,即

TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("filename.keyword",name);

问题解决。

3.3 原因

term做精确查询可以用它来处理数字,布尔值,日期以及文本。查询数字时问题不大,但是当查询字符串时会有问题。term查询的含义是termQuery会去倒排索引中寻找确切的term,但是它并不知道分词器的存在。term表示查询字段里含有某个关键词的文档,terms表示查询字段里含有多个关键词的文档。也就是说直接对字段进行term本质上还是模糊查询,只不过不会对搜索的输入字符串进行分词处理罢了。

如果想通过term查到数据,那么term查询的字段在索引库中就必须有与term查询条件相同的索引词,否则无法查询到结果。

如果是text用于全文搜索,会分词,而keyword用于关键词搜索.
在这里插入图片描述

4 Elasticsearch解决只能查询10000条数据方案

es官方默认限制索引查询最多只能查询10000条数据,查询第10001条数据开始就会报错:

Result window is too large, from + size must be less than or equal to

但是很多时候10000数据不能满足项目的需求,所以我们就要解除这个限制。

解决方案:
第一种办法.在kibana中执行,解除索引最大查询数的限制

put _all/_settings
	{
	"index.max_result_window":200000
	}

_all表示所有索引,针对单个索引的话修改成索引名称即可

第二种办法:在创建索引的时候加上

“settings”:{
		"index":{
			"max_result_window": 500000
				}
			}

但是修改完之后,通过api查询回来的totalhits还是只有10000条,解决如下 :

在查询时候把 track_total_hits 设置为 true。

track_total_hits 设置为false禁用跟踪匹配查询的总点击次数

设置为true就会返回真实的命中条数。

java代码在构建条件时候加上:

searchSourceBuilder.trackTotalHits(true);

kibana查询

GET 索引名/_search
	{
	 "query": {
		 "match_all": {}
			 },
		 "track_total_hits":true
	}

标签:term,10000,错误,索引,查询,排查,Elasticsearch,query,true
来源: https://blog.csdn.net/ZGL_cyy/article/details/122361414

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有