ES索引模糊查询
时间:2022-07-26
本文章向大家介绍ES索引模糊查询,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 准备环境
docker pull elasticsearch:6.7.0
docker pull kibana:6.7.0
docker run -it --name elasticsearch -d -p 9200:9200 -p 9300:9300 elasticsearch:6.7.0
docker run --link elasticsearch -p 5601:5601 --name kibana -d kibana:6.7.0
2. java代码
2.1 pom引入
<elasticsearch.version>6.3.1</elasticsearch.version>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
2.2 数据写入代码
//es
TransportClient client = new PreBuiltTransportClient(
Settings.builder()
.put("cluster.name", "docker-cluster")
.build()
).addTransportAddress(
new TransportAddress(InetAddress.getByName("localhost"), 9300)
);
if (null == client) {
LOG.error("es --> client is failed!");
}
List<InData> dataList = new ArrayList<>();
for(int i=100; i <= 110; i++) {
InData data = new InData();
// final String md5AsHex = MD5Hash.getMD5AsHex(Bytes.toBytes("flag_"));
// String newRowKey = md5AsHex + "^" + MD5Hash.getMD5AsHex(Bytes.toBytes(i));;
// System.out.println(newRowKey);
// LOG.error(newRowKey);
data.setNewRowKey("flag_"+i);
data.setFlag("flag_"+i);
data.setQuery("query_"+i);
data.setCost(i+"");
data.setConversionvalue(i+"");
dataList.add(data);
}
if (dataList.size() > 0) {
for (MysqlData data: dataList) {
IndicesExistsRequest request = new IndicesExistsRequest(data.getNewRowKey());
IndicesExistsResponse response = client.admin().indices().exists(request).actionGet();
if (!response.isExists()) {
try {
client.prepareIndex(data.getNewRowKey(), data.getNewRowKey(), data.getNewRowKey())
.setSource(XContentFactory.jsonBuilder().startObject().field("flag", data.getFlag())
.field("query", data.getQuery())
.field("cost", data.getCost())
.field("value", data.getConversionvalue())
.endObject()
)
.execute()
.get();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
展示查看:
也可以使用批量的方式数据写入:
BulkRequestBuilder bulkRequest = client.prepareBulk();
if (dataList.size() > 0) {
for (InData data: dataList) {
//搜索词, cost, value
bulkRequest.add(client.prepareIndex(data.getNewRowKey(), data.getNewRowKey(), data.getNewRowKey())
.setSource(XContentFactory.jsonBuilder().startObject()
.field("flag", data.getFlag())
.field("query", data.getQuery())
.field("cost", data.getCost())
.field("value", data.getConversionvalue())
.endObject()
)
);
}
}
BulkResponse bulkResponse = bulkRequest.get();
if (bulkResponse.hasFailures()) {
LOG.error("es --> result is failed! count: " + dataList.size());
}
2.3 通过索引模糊查询
IndicesStatsRequest indicesStatsRequest = new IndicesStatsRequest();
indicesStatsRequest.indices("flag_*");
Map<String, IndexStats> stats=client.admin().indices().stats(indicesStatsRequest).actionGet().getIndices();
String[] index = new String[stats.size()];
final String[] indexes = stats.keySet().toArray(index);
// for(IndexStats stat:stats.values()) {
//获取索引值
// String index = stat.getIndex();
// System.out.println(index);
// }
SearchResponse response = client.prepareSearch(indexes)// 索引名
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH) // 设置查询类型,精确查询
.execute().actionGet();
final SearchHits hits = response.getHits();
System.out.println("查询结果有:" + hits.getTotalHits() + "条");
Iterator<SearchHit> iterator = hits.iterator();
while (iterator.hasNext()) {
final SearchHit next = iterator.next();
final Map<String, Object> map = next.getSourceAsMap();
//获取字段值
System.out.println(map.get("cost"));
}
附完整代码:
import com.am.dads.comm.InData;
import org.elasticsearch.action.admin.indices.stats.IndexStats;
import org.elasticsearch.action.admin.indices.stats.IndicesStatsRequest;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.InetAddress;
import java.util.*;
public class ESWriteTest {
private static final Logger LOG = LoggerFactory.getLogger(ESWriteTest.class);
public static void main(String[] args) throws Exception {
//es
TransportClient client = new PreBuiltTransportClient(
Settings.builder()
.put("cluster.name", "docker-cluster")
.build()
).addTransportAddress(
new TransportAddress(InetAddress.getByName("localhost"), 9300)
);
if (null == client) {
LOG.error("es --> client is failed!");
}
List<InData> dataList = new ArrayList<>();
for(int i=100; i <= 110; i++) {
InData data = new InData();
// final String md5AsHex = MD5Hash.getMD5AsHex(Bytes.toBytes("flag_"));
// String newRowKey = md5AsHex + "^" + MD5Hash.getMD5AsHex(Bytes.toBytes(i));;
// System.out.println(newRowKey);
// LOG.error(newRowKey);
data.setNewRowKey("flag_"+i);
data.setFlag("flag_"+i);
data.setQuery("query_"+i);
data.setCost(i+"");
data.setConversionvalue(i+"");
dataList.add(data);
}
BulkRequestBuilder bulkRequest = client.prepareBulk();
if (dataList.size() > 0) {
for (InData data: dataList) {
//搜索词, cost, value
bulkRequest.add(client.prepareIndex(data.getNewRowKey(), data.getNewRowKey(), data.getNewRowKey())
.setSource(XContentFactory.jsonBuilder().startObject()
.field("flag", data.getFlag())
.field("query", data.getQuery())
.field("cost", data.getCost())
.field("value", data.getConversionvalue())
.endObject()
)
);
}
}
BulkResponse bulkResponse = bulkRequest.get();
if (bulkResponse.hasFailures()) {
LOG.error("es --> result is failed! count: " + dataList.size());
}
IndicesStatsRequest indicesStatsRequest = new IndicesStatsRequest();
indicesStatsRequest.indices("flag_*");
Map<String, IndexStats> stats=client.admin().indices().stats(indicesStatsRequest).actionGet().getIndices();
String[] index = new String[stats.size()];
final String[] indexes = stats.keySet().toArray(index);
// for(IndexStats stat:stats.values()) {
//获取索引值
// String index = stat.getIndex();
// System.out.println(index);
// }
SearchResponse response = client.prepareSearch(indexes)// 索引名
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH) // 设置查询类型,精确查询
.execute().actionGet();
final SearchHits hits = response.getHits();
System.out.println("查询结果有:" + hits.getTotalHits() + "条");
Iterator<SearchHit> iterator = hits.iterator();
while (iterator.hasNext()) {
final SearchHit next = iterator.next();
final Map<String, Object> map = next.getSourceAsMap();
//获取字段值
System.out.println(map.get("cost"));
}
client.close();
}
}
- AVFoundation 框架初探究(三)
- AVFoundation 框架初探究(二)
- 关于视图和存储过程的权限问题探究 (r9笔记第87天)
- Java基础-day08-超市购物系统总结
- AVFoundation 框架初探究(一)
- 【Go 语言社区】 HTML5 前端--数据保存实例
- crontab设置导致的服务器进程异常问题 (r10笔记第4天)
- 一条SQL语句的执行计划变化探究(r10笔记第3天)
- tensorflow(一)windows 10 python3.6安装tensorflow1.4与基本概念解读
- 基于AgileEAS.NET SOA 中间件领域模型数据器快速打造自己的代码生成器
- Java基础-day07-代码题-自定义数据类型;ArrayList集合
- 一条报警信息的快速处理和分析(r9笔记第99天)
- 【Go 语言社区】解析Go语言编程中的struct结构
- centos+scala2.11.4+hadoop2.3+spark1.3.1环境搭建
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Dynamic Programming - 213. House Robber II
- Dynamic Progamming - 198. House Robber
- Dynamic Programming - 221. Maximal Square
- Dynamic Programming - 174. Dungeon Game
- Dynamic Programming - 97. Interleaving String
- Dynamic Programming - 72. Edit Distance
- Dynamic Programming - 64. Minimum Path Sum
- Dynamic Programming - 322. Coin Change
- Dynamic Programming - 279. Perfect Squares
- Dynamic Programming - 120. Triangle
- Dynamic Programming - 63. Unique Paths II
- Tree - 109. Convert Sorted List to Binary Search Tree
- Tree - 108. Convert Sorted Array to Binary Search Tree Easy
- Tree - 236. Lowest Common Ancestor of a Binary Tree
- Tree - 235. Lowest Common Ancestor of a Binary Search Tree