ES使用

ElasticaSearch

  1. 导包

   <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>
  1. 配置

  @Bean
    public RestHighLevelClient client(){
        RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost", 9200, "http")));
        return client;
    }
  1. 使用

  • 创建索引表

 //创建建库索引对象
 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);

}


}
 
posted @   永远的幼稚  阅读(321)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示