elasticsearch查询

2023-11-16

环境:es1.3 、eclipse 、jdk1.8
问题:刚开始用游标查询,再用游标获取数据,查询耗时较慢。
解决办法:不使用游标查询,直接根据条件查询
es查询参考网址:https://www.cnblogs.com/chenyuanbo/p/10296840.html
版本升级问题
https://segmentfault.com/a/1190000015863043?utm_source=tag-newest
游标使用场景:游标更适合搜索结果数据量大的情况
查询指定字段:setFetchSource
不适用游标代码如下

private List<Entry> getEntryListByCpwsId(String s) {
		//term 不支持分词查询
				SearchResponse response = ESUtils.getClient()
						.prepareSearch("c***dsr")
//						.setFetchSource(new String[]{"pname","money"},null)//查询指定字段
						.setQuery(QueryBuilders.boolQuery()
						.must(QueryBuilders.termQuery("c***Id", s))
		//.must(QueryBuilders.queryString("\"" + caseNo+ "\"").field("caseNo"))
		.mustNot(QueryBuilders.termQuery("s**s", 102)))
						.get();
		SearchHits hits = response.getHits();
		List<Entry> entryList = new ArrayList<Entry>();
		if (hits.getTotalHits() < 1) {
			return null;
		}
		for (SearchHit hit : response.getHits()) {
			String json = hit.getSourceAsString();
			String _id = hit.getId();
			String hitType = hit.getType();
			Entry entry = EntryManager.getEntry(hitType, json, _id, false);
			if (entry == null)
				continue;
			entry.setEntryId(_id);
			entryList.add(entry);
		}
		return entryList;
	}

使用游标如下:

private String getScrollId(String weidu) {
		SearchResponse response = ESUtils.getClient().prepareSearch(weidu)// 索引名称
				.setQuery(QueryBuilders.boolQuery()
//						.must(QueryBuilders.queryString("\"" + nameMd5+ "\"").field("midcardNo"))
						.must(QueryBuilders.termQuery("regexFlag", 0))
//						.must(QueryBuilders.termQuery("_id", "c2016411329minchu2497_t20161228"))
						)
				.setSize(2000).setScroll(new TimeValue(600000)).setSearchType(SearchType.SCAN).execute().actionGet();
		String scrollid = response.getScrollId();
		System.out.println("条数:"+response.getHits().getTotalHits());
		return scrollid;
	}


public static Map<String,Object> scanEntryListMap(String scrollId, String highlightedFields) 
	{	
		Map<String,Object> resultMap = new LinkedHashMap<String,Object>();
		Client client = ESUtils.getClient();
		
	    //使用上次的scrollId继续访问
		SearchResponse searchResponse = null;
		while(true)
        {
        	try
        	{
        		 
        		searchResponse = client.prepareSearchScroll(scrollId).setScroll(new TimeValue(600000)).execute().actionGet();
        		 
        		break;
        	}catch (NoNodeAvailableException cont)
        	{
        		try {
					Thread.sleep(5000);
				} catch (Exception ex) {
				}
				continue;
        	}
        }
		if(searchResponse == null)
			return null;
	    //System.out.println("searchResponse=" + searchResponse.getScrollId());
	    List<String> entryList = new ArrayList<String>();
	    for (SearchHit hit : searchResponse.getHits()) {
        	String json = hit.getSourceAsString();
        	 
        	entryList.add(json);
        }
	    
        resultMap.put("scrollId", searchResponse.getScrollId());
        resultMap.put("count", searchResponse.getHits().getHits().length);
        resultMap.put("entryList", entryList);
        return resultMap;
	}   

查询字段missing

		SearchRequestBuilder searchRequestBuilder = ESUtils.getClient().prepareSearch(weidu);
		searchRequestBuilder.setTypes(weidu);
		searchRequestBuilder.setSearchType(SearchType.SCAN);
		searchRequestBuilder.setScroll(TimeValue.timeValueMinutes(8));
		searchRequestBuilder.setSize(400);
		// 条件
		BoolFilterBuilder boolFilterBuilder = FilterBuilders.boolFilter();
		boolFilterBuilder.must(FilterBuilders.existsFilter("entNameOld"));

		searchRequestBuilder.setPostFilter(boolFilterBuilder);

		SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
		String scrollid = searchResponse.getScrollId();
		//根据游标再查

根据id查询

GetResponse actionGet = ESUtils.getClient().prepareGet(index, tpye, id)
				.setFetchSource(new String[] { "field1", "field2" }, null)//指定字段,不指定字段可不加
				.execute().actionGet();
String sourceAsString = actionGet.getSourceAsString();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

elasticsearch查询 的相关文章

  • 如何在没有部署 K8S 的情况下重启 pod?

    我部署了一个弹性搜索 https www elastic co elasticsearch使用此命令在 K8S 上集群helm install elasticsearch elastic elasticsearch 我可以看到 Pod 正在
  • Elasticsearch GET API 获取分片大小

    在 Elasticsearch 2 3 3 中 有没有办法使用返回 JSON 的 GET API 获取分片大小 目前我找到了以下几种获取shard size的方法 这两种方法都存在问题 recovery gt 使用 JSON 进行响应并提供
  • Elasticsearch:将新元素附加到对象的嵌套数组

    我正在尝试将新项目添加到特定文档中的嵌套对象数组中 我已经搜索过 似乎部分文档的更新不支持我需要的内容 它用新元素替换了整个数组 所以我进行了脚本化更新 它通过 REST API 按预期工作 PUT transactions mapping
  • ElasticSearch:从 Painless 脚本中的嵌套字段计算 arcDistance

    我需要计算 Painless 脚本内的弧距 但在这种情况下还没有找到访问 geo API 的方法 即 第一点作为参数传递给脚本 这意味着我只获得原始值 第二点是从嵌套文档中读取的 这意味着我无法使用doc myGeoField value
  • 如何使用 Jest 从 ElasticSearch 获取索引列表

    我正在尝试使用 Jest 检索索引列表 但我只得到 Stats statistics new Stats Builder build result client execute statistics 如何从结果中检索索引列表 除了统计之外
  • ElasticSearch:如何使用月份和日期范围过滤器查询日期字段

    目前 我已经知道如何从 时间戳 日期字段过滤日期范围 这很简单 range date gte 2015 11 01 lte 2015 11 30 但是 当您对基于月份的范围感兴趣时 如何过滤日期gte 02 22 and lte 03 21
  • 使用 Elastic4s 进行动态 ElasticSearch 映射

    我有一个文档要在elasticSearch上建立索引 该文档包含一些我事先无法知道的动态键 例如以下示例中的 西班牙语 或 法语 contents title spanish Hola amigos french Bonjour les a
  • 如何使用docker将metricbeat连接到elasticsearch和kibana

    我已经使用 docker compose 设置了 elasticsearch 和 kibana elasticsearch部署在 localhost 9200当 kibana 部署在localhost 5601 当尝试使用 docker r
  • Elasticsearch,如何使 NEST 地图响应类

    首先 我使用的是NEST 5 5 0 我对远程 elasticsearch index 的使用如下 var node new Uri http distribution virk dk cvr permanent var settings
  • ElasticSearch:Jest、Rest、TransportClient、NodeClient

    我已经浏览了官方文档https www elastic co blog found interface elasticsearch picking client https www elastic co blog found interfa
  • Logback 与 Elasticsearch 直接集成

    我有带有 slf4j logback 的 Spring Boot 应用程序 并寻找集中式日志记录解决方案 现在我发现我不需要使用日志收集器 比如logstash filebeat rsyslog 有直接收集器Ingest Node在 Ela
  • ElasticSearch - 字符串字段长度的统计方面

    我想检索有关字符串字段的数据 例如最小 最大和平均长度 通过计算字符串内的字符数 我的问题是聚合 http www elasticsearch org guide en elasticsearch reference current sea
  • ElasticSearch 匹配多个前缀术语

    我试图为 ElasticSearch 提供一个包含多个术语的查询 然后给出匹配的文档 其中指定的术语位于目标字段中的任何位置 这些术语可以是完整的单词或单词前缀 示例文档 msg 你好 我是一条短信 示例查询字符串 你好消息 你好 和 消息
  • 使用映射创建 Elasticsearch 索引

    我正在努力完成索引创建的简单任务 目标是使用分析器和字段映射创建索引 当我使用分析器创建索引时 我可以通过分析 api 调用与分析器对话 但是当我添加映射信息时 创建索引调用失败 并显示 未找到字段 field 的分析器 analyzer1
  • 超出elasticsearch中字段的最大长度 - kibana中的错误

    发现 prod logs 索引的 CSnZmwB xkQcDCOrP1V 文档的 message 字段的长度已超过 1000000 允许分析突出显示的最大值 可以通过更改 index highlight max analyzed offse
  • 静态加密数据时 ElasticSearch 的工作原理

    我的数据存在于 DynamoDB 中 为了启用全文搜索 我使用 Lambda 函数将其转发到 ES 索引 但如果可能的话 我希望在不影响搜索效率的情况下对数据进行加密 但我不确定我的搜索在这里如何进行 我找不到任何文档 文章来说明当数据静态
  • 如何将不带空格的单词与带空格的 ElasticSearch 数据进行匹配

    在我的elasticsearch中 我有数据 New York 我想查询并匹配 NewYork 请注意查询字符串中没有空格 我怎样才能实现这个目标 有什么分析仪可以在这里提供帮助吗 我认为你可以申请木瓦令牌过滤器 https www ela
  • 嵌套类型的动态映射

    我正在尝试为如下对象创建动态映射 product productId 99999 manufacturerId A0001 manufacturerCode A101LI name Test Product description Desc
  • Elastic Search 6 嵌套查询聚合

    我是弹性搜索查询和聚合的新手 我有一个带有以下映射的嵌套文档 PUT company mappings data properties deptId type keyword deptName type keyword employee t
  • 在elasticSearch中查询时定义分析器

    我对 Elasticsearch 还很陌生 只需要一些说明 我们可以在查询搜索服务器时定义一个分析器吗 我尝试使用 文本 和 字段 查询 效果很好 Query curl XPOST http localhost 9200 test user

随机推荐

  • C++学习 十、函数重载,函数模板

    C 学习 十 函数重载 函数模板 前言 函数重载 二义性 强制类型转换 类型与类型引用 默认参数 const指针参数和const引用参数 函数模板 模板函数声明与定义 函数模板重载 显式实例化 显式具体化 重载解析 引导编译器使用函数模板
  • Box layout

    Layout management with layout classes is much more flexible and practical It is the preferred way to place widgets on a
  • Vue3+TypeScript 完整项目上手教程

    转自 Vue3拥抱TypeScript的正确姿势 https juejin im post 6875713523968802829 一个完整的Vue3 Ts项目 支持 vue和 tsx写法 项目地址 https github com vin
  • Tomcat的安装与环境变量配置(图文详解)

    Tomcat的安装与环境变量配置 首先说明一下我的电脑配置 Windows 7 专业版 64位操作系统 安装内存8G 四核处理器 一 Tomcat的下载与安装 1 进入Tomcat官网 https tomcat apache org 2 在
  • soap错误码和获取处理错误码的详细信息

    gsoap页面 https www genivia com doc guide html index html soap客户端用户登录返回值错误代码表 ERROR CODE SOAP EOF 1 Unexpected end of file
  • const 在C和C++ 中的区别

    目录 c中的const C 中的const const修饰指针 const修饰引用 const是construct的缩写 是c c 语言中的类型限定符 采用const修饰变量 功能是对变量声明为只读特性 并保护变量值以防被修改 c中的con
  • 最新版Adobe2023:After Effects 2023(Ae2023) win/mac版中文特别版

    Adobe After Effects 2023 AE2023 它用于视频处理后期制作 创建音乐视频 广告 动画 标题以及许多其他需要数字视频效果的元素 Adobe After Effects提供了出色的控制功能 广泛的创意工具以及与其他视
  • 香港云服务器怎么样_硅云服务器评测

    这次我来给大家测试下香港云服务器 本次测试选用的硅云香港可用一区 使用到的配置是2H2G 官方文档介绍说通用型g1是50 cpu性能 因为想用Linux 只是做下简单评测 就选择了通用型 正式使用的朋友建议买标准型S 100 CPU性能 一
  • android studio gradle 下载失败万能解决方案

    The specified Gradle distribution https services gradle org distributions gradle 7 2 2 bin zip does not exist 报错如上 介绍个绝对
  • 飞腾平台 银河麒麟 安装nginx

    飞腾平台 银河麒麟 安装nginx 1 在 home目录输入命令新建npf文件夹 mkdir npf 进入npf 目录输入命令新建nginx server文件夹 mkdir nginx server 2 将以下安装包上传到nginx ser
  • U-boot在S3C2440上的移植详解(一)

    本文转载至 http www embeddedlinux org cn html jishuzixun 201303 16 2499 html 一 移植环境 主 机 VMWare Fedora 9 开发板 Mini2440 64MB Nan
  • 小程序开发之 wx.getUserInfo获取用户信息方案介绍

    原文链接 https www cnblogs com kenshinobiy p 9118024 html 背景 小程序一个比较重要的能力就是获取用户信息 也就是使用 wx getUserInfo 接口 我们发现几乎所有的小程序都会调用这个
  • websocket有什么特点

    websocket有什么特点 答 websocket的最大特点就是 服务器可以主动向客户端推送信息 客户端也可以主动向服务器发送信息 是真正的双向平等对话 属于服务器推送技术的一种 1 建立在tcp协议之上 服务器端的实现比较容易 2 与H
  • 多线程处理

    https www runoob com python3 python3 multithreading html import requests import threading import time import xlrd import
  • 二维数组分组,一行显示5个,适合在table里面显示,php控制显示的数据

    需求 把数据平均显示到table的显示框内 如一行5个数据 效果 方法代码 一行展示N个数据 param int type 默认1 可扩展 param int num 一行显示的个数 可设置 param arrs 二维数组 static f
  • 强化学习学习

    强化学习一些基本概念 强化学习是除了监督学习和无监督学习的第三种机器学习方法 监督学习 Supervised Learning 是从外部监督者提供的带标注训练集中进行学习 任务驱动 无监督学习 Unsupervised Learning 是
  • 003 C++基础篇

    前言 大家好 本文将会向您介绍引用 定义 使用场景 引用与值分别作为返回值和参数时的性能比较 引用的权限 引用 一 引用是什么 引用 定义一个变量的别名 不是新定义一个变量 而是给已经存在的变量取了一个别名 编译器不会为引用变量单独开辟一个
  • WPF应用程序最小化到系统托盘

    using System using System Collections Generic using System ComponentModel using System Windows using System Windows Inpu
  • Unity3D跑酷游戏开发-游戏结束分数排名当前高能显示 (原创教程)

    一般游戏结束后都会有个分数排名板 接下来让分析这功能 1 游戏结束后显示高分排列 当前玩家分数高能显示 如果能进入排名板 2 数据必须持久化 切换场景 关闭开启游戏都要能用 流程 游戏结束后 调出排名板 1 取得上次的所有排名数据保存到li
  • elasticsearch查询

    环境 es1 3 eclipse jdk1 8 问题 刚开始用游标查询 再用游标获取数据 查询耗时较慢 解决办法 不使用游标查询 直接根据条件查询 es查询参考网址 https www cnblogs com chenyuanbo p 10