ES使用
-
导包
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.2.1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.2.1</version>
</dependency>
-
配置
@Bean
public RestHighLevelClient client(){
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost", 9200, "http")));
return client;
}
-
创建索引表
//创建建库索引对象
CreateIndexRequest createIndexRequest = new CreateIndexRequest();
//索引库名 相当于数据库表名
createIndexRequest.index("cyt");
//设置分片和副本 createIndexRequest.settings(Settings.builder().put("number_of_shards",1).put("number_of_replicas",0));
//创建映射 相当于数据库字段
createIndexRequest.mapping()
//使用高版本客户端对象
IndicesClient indices = client.indices();
//创建
CreateIndexResponse createIndexResponse = indices.create(createIndexRequest);
//输出响应结果
System.out.println(createIndexResponse.isAcknowledged());
-
删除索引表
//创建删库索引对象
DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest();
//索引库名
deleteIndexRequest.indices("cyt");
//使用高版本客户端对象
IndicesClient indices = client.indices();
//删除
DeleteIndexResponse delete = indices.delete(deleteIndexRequest);
//输出结果集
System.out.println(delete.isAcknowledged());
-
添加数据
//创建添加对象
IndexRequest indexRequest = new IndexRequest();
//添加的索引库
indexRequest.index("cyt");
//类型
indexRequest.type("doc");
//id
indexRequest.id("1");
//map中存数据
HashMap map = new HashMap();
map.put("username","陈云天");
map.put("age",18);
map.put("price",9999.99);
map.put("phone",10001);
map.put("pic","http://1.png");
//存入
IndexRequest source = indexRequest.source(map);
//使用高版本客户端存入
IndexResponse index = client.index(indexRequest);
//打印结果集
System.out.println(index.getResult());
-
修改数据
//创建修改对象并给入表名、类型、id
UpdateRequest updateRequest = new UpdateRequest("ggg","doc","7");
//使用map修改值
HashMap map = new HashMap();
map.put("username","赵小七");
//修改
updateRequest.doc(map);
//使用高版本客户端修改
UpdateResponse update = client.update(updateRequest);
//打印结果集
System.out.println(update.getResult());
-
删除数据
//创建删除对象
DeleteRequest deleteRequest = new DeleteRequest();
//表名
deleteRequest.index("ggg");
//id
deleteRequest.id("6");
//类型
deleteRequest.type("doc");
//使用高版本客户端修改
DeleteResponse delete = client.delete(deleteRequest);
//打印结果集
System.out.println(delete.getResult());
-
查询数据
//创建查询对象
GetRequest getRequest = new GetRequest();
//表名
getRequest.index("gzs");
//类型
getRequest.type("doc");
//id
getRequest.id("kkwZlIABKcpxytiOyzVV");
//使用高版本客户端查询
GetResponse documentFields = client.get(getRequest);
//打印结果集
System.out.println(documentFields.getSourceAsMap());
-
搜索7种
@Test
public void testSearch() throws IOException {
//起始页数
Integer page = 1;
//每页条数
Integer size = 3;
//搜索请求对象
SearchRequest searchRequest = new SearchRequest();
//搜索表名
searchRequest.indices("food");
//搜索表类型
searchRequest.types("doc");
//搜索源对象构建
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//1.matchAllQuery 查所有
// searchSourceBuilder.query(QueryBuilders.matchAllQuery());
//2.termQuery 根据字段不分词查询
// searchSourceBuilder.query(QueryBuilders.termQuery("username","张"));
//3.termsQuery 根据多个字段不分词查询
// searchSourceBuilder.query(QueryBuilders.termsQuery("username","1","老李"));
//4.matchQuery 根据字段分词查询
// searchSourceBuilder.query(QueryBuilders.matchQuery("username","张"));
//5.multiQuery 多字段分词查询
// searchSourceBuilder.query(QueryBuilders.multiMatchQuery("南窑头汉堡臭豆腐","name","address").field("name",10));
//6.RangeQuery 范围查询+排序
// searchSourceBuilder.query(QueryBuilders.rangeQuery("price").gte(10).lte(50));
// searchSourceBuilder.sort("price", SortOrder.DESC);
//7.boolQuery组合查询
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "臭豆腐");
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("price").gte(10).lte(50);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQueryBuilder);
boolQueryBuilder.must(rangeQueryBuilder);
searchSourceBuilder.query(boolQueryBuilder);
//高亮设置
HighlightBuilder highlightBuilder = new HighlightBuilder();
//前缀
highlightBuilder.preTags("<font style='color:red'>");
highlightBuilder.postTags("</font>");
highlightBuilder.field("name");
searchSourceBuilder.highlighter(highlightBuilder);
//分页
//起始下标
searchSourceBuilder.from((page-1)*size);
//每页条数
searchSourceBuilder.size(size);
//设置搜索源
searchRequest.source(searchSourceBuilder);
//执行搜索
SearchResponse search = client.search(searchRequest);
//结果集
SearchHits hits = search.getHits();
//查询总数
long totalHits = hits.getTotalHits();
float score1 = hits.getMaxScore();
System.out.println(totalHits);
System.out.println(score1);
SearchHit[] hits1 = hits.getHits();
for (SearchHit hit : hits1) {
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
String username = (String) sourceAsMap.get("name");
//取出高亮字段
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
if(!highlightFields.isEmpty()){
//取出高亮
HighlightField name = highlightFields.get("name");
if(name!=null){
StringBuffer stringBuffer = new StringBuffer();
for (Text fragment : name.fragments()) {
stringBuffer.append(fragment);
}
username = stringBuffer.toString();
}
}
String id = hit.getId();
Object address = sourceAsMap.get("address");
Object price = sourceAsMap.get("price");
float score = hit.getScore();
System.out.println(id);
System.out.println(username);
System.out.println(address.toString());
System.out.println(score);
System.out.println(price);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理