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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 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
            }
          }
        }
  }
}


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
监控 安全 API
Elasticsearch实例磁盘占用率高排查及解决
开源 ES 实例健康状态 首先,先介绍下开源 Elasticsearch 的三种健康状态:绿色、黄色和红色。 在分片层面, 绿色:所有的主分片和副本分片都已分配。你的集群是 100% 可用的。 黄色:所有主分片都已经分配,但至少有一个副本分片未被分配。
8836 0
|
6月前
|
安全 数据安全/隐私保护
Elasticsearch 7.* 常见错误以及解决方案
Elasticsearch 7.* 常见错误以及解决方案
291 0
|
7月前
|
存储 监控 安全
最近几个典型 Elasticsearch 线上易出错难排查问题汇集,咱们得避免!
最近几个典型 Elasticsearch 线上易出错难排查问题汇集,咱们得避免!
93 3
记录一次elasticsearch-5.6.4宕机排查经历
记录一次elasticsearch-5.6.4宕机排查经历
151 0
|
存储 人工智能 API
Elasticsearch实战:常见错误及详细解决方案
Elasticsearch实战:常见错误及详细解决方案
|
数据库
探究 | Elasticsearch CPU高排查思路
Elasticsearch CPU高排查思路的探究思路。
5863 1
|
运维 Java 程序员
方法 | Elasticsearch Jest 批量操作bug 根因定位排查
本文介绍Elasticsearch Jest 批量操作bug 根因定位排查的方法。
1611 0
LXJ
|
安全
elastic search启动常见错误
elastic search启动常见错误
LXJ
347 0
elastic search启动常见错误
|
API
方法 | Elasticsearch Jest 批量操作bug 根因定位排查
1、背景 使用Jest进行批量插入数据的时候,偶尔会出现如下的bug One or more of the items in the Bulk request failed, check BulkResult.getItems() for more information. 起初认为是偶发,就把并发数调小,就再没有关注。
652 0
|
SQL 安全
实战 | 一步步排查基于业务场景的Elasticsearch难题!
1、题记 我们在实际的业务场景中做Elasticsearch开发时,免不了遇到这样、那样的问题。 《死磕Elasticsearch方法论》中,已经告诉大家相关问题的排查方法。 这一节,我们以具体的示例,解决基于业务场景的Elasticsearch难题的方法?
124 0