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

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: Elasticsearch常见错误及如何排查错误

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
  }

5 queryStringQuery精确精确查询

一般需要精确查询的字段,在存储的时候都不建议分词。但是已经分词了,还想精确精确查询,使用queryStringQuery,在需要精确查询的词语外面使用双引号引起来

queryStringQuery("""+words+""").field("prod_name")

6 修改ignore_above字符大小或修改mappings

PUT common_index/_mappings
{
  "properties" : {
    "ocrContent" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 111
            }
          }
        }
  }
}


相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
监控 安全 API
Elasticsearch实例磁盘占用率高排查及解决
开源 ES 实例健康状态 首先,先介绍下开源 Elasticsearch 的三种健康状态:绿色、黄色和红色。 在分片层面, 绿色:所有的主分片和副本分片都已分配。你的集群是 100% 可用的。 黄色:所有主分片都已经分配,但至少有一个副本分片未被分配。
9067 0
|
存储 监控 安全
最近几个典型 Elasticsearch 线上易出错难排查问题汇集,咱们得避免!
最近几个典型 Elasticsearch 线上易出错难排查问题汇集,咱们得避免!
|
安全 数据安全/隐私保护
Elasticsearch 7.* 常见错误以及解决方案
Elasticsearch 7.* 常见错误以及解决方案
602 0
|
数据库
探究 | Elasticsearch CPU高排查思路
Elasticsearch CPU高排查思路的探究思路。
6104 1
记录一次elasticsearch-5.6.4宕机排查经历
记录一次elasticsearch-5.6.4宕机排查经历
213 0
|
存储 人工智能 API
Elasticsearch实战:常见错误及详细解决方案
Elasticsearch实战:常见错误及详细解决方案
|
运维 Java 程序员
方法 | Elasticsearch Jest 批量操作bug 根因定位排查
本文介绍Elasticsearch Jest 批量操作bug 根因定位排查的方法。
1690 0
LXJ
|
安全
elastic search启动常见错误
elastic search启动常见错误
LXJ
418 0
elastic search启动常见错误
方法 | Elasticsearch Jest 批量操作bug 根因定位排查
1、背景 使用Jest进行批量插入数据的时候,偶尔会出现如下的bug One or more of the items in the Bulk request failed, check BulkResult.getItems() for more information. 起初认为是偶发,就把并发数调小,就再没有关注。
|
SQL 安全
实战 | 一步步排查基于业务场景的Elasticsearch难题!
1、题记 我们在实际的业务场景中做Elasticsearch开发时,免不了遇到这样、那样的问题。 《死磕Elasticsearch方法论》中,已经告诉大家相关问题的排查方法。 这一节,我们以具体的示例,解决基于业务场景的Elasticsearch难题的方法?