Elasticsearch在Java中使用

基于之前自己搭建的springcloud项目来写的
项目提供者:
pom.xml:

<dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.6.2</version>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.6.2</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.67</version>
            <scope>compile</scope>
        </dependency>

Service

/**
     * 查询es中的goods的测试
     */
    public List<Goods> esGoods2(String index, String str, String fileName);

ServiceImpl:

@RequestMapping("esGoods2")
    @Override
    public List<Goods> esGoods2(@RequestParam("index") String index,@RequestParam("str") String str,@RequestParam("fileName") String fileName) {
        List<Goods> goods=new ArrayList<Goods>();
        String s = esUtil.keywordSearch(index, str, 0, 20, fileName);
        Object o = JSONObject.toJSON(s);

        ArrayList<Goods> goods1 = JSON.parseObject((String) o, new TypeReference<ArrayList<Goods>>() {
        });

        for(Goods g:goods1){
            System.out.println(g);
            goods.add(g);
        }

        return goods;
    }

ESUtil:

package com.jbit.util;

import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpHost;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Component
public class ESUtil {

    private RestHighLevelClient client;

    /**
     * 根据索引名以及ID查询数据
     * @param index 索引名称
     * @param id    数据ID
     * @return
     */
    public String getDocument(String index, String id){
        GetResponse getResponse = null;
        try{
            client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("localhost", 9200, "http")));

            GetRequest getRequest = new GetRequest(index,"_doc", id );
            getResponse = client.get(getRequest, RequestOptions.DEFAULT);
            System.out.println(JSONObject.toJSONString(getResponse));
            client.close();
        }catch(IOException e){
            e.printStackTrace();
        }
        return JSONObject.toJSONString(getResponse);
    }

    /**
     * 进行全文检索
     * @param index
     * @param value
     * @param current
     * @param size
     * @return
     */
    public String keywordSearch(String index, String value,
                                int current, int size,String fileName){
        List<Map<String, Object>> result = null;
        try{
            client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1", 9200, "http")));
            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices(index);

            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            //支持全词搜索的字段有:keywordName,keywordAuthor"
            searchSourceBuilder.query(QueryBuilders
                    .multiMatchQuery(value, fileName));
            searchSourceBuilder.from(current);
            searchSourceBuilder.size(size);

            searchRequest.source(searchSourceBuilder);
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
            System.out.println(JSONObject.toJSONString(searchResponse));
            //处理返回结果
            result = dealResult(searchResponse.getHits());
            client.close();
        }catch(IOException e){
            e.printStackTrace();
        }
        return JSONObject.toJSONString(result);
    }

    /**
     * 分页查询索引所有数据
     * @param index
     * @param current
     * @param size
     * @return
     * @throws IOException
     */
    public String searchAll(String index, int current, int size) throws IOException {
        client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http")));
        SearchRequest searchRequest = new SearchRequest(index);

        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.matchAllQuery());
        searchSourceBuilder.from(current);
        searchSourceBuilder.size(size);

        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(JSONObject.toJSONString(searchResponse));
        //处理返回结果
        SearchHits hits = searchResponse.getHits();
        client.close();
        return JSONObject.toJSONString(hits);
    }

    private List<Map<String, Object>> dealResult(SearchHits hits){
        List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
        for (SearchHit hit : hits.getHits()) {
            Map<String, Object> map = hit.getSourceAsMap();
            result.add(map);
        }
        return result;
    }

}

消费者:
Service:

@RequestMapping("esGoods2")
    public List<Goods> esGoods2(@RequestParam("index") String index, @RequestParam("str") String str, @RequestParam("fileName") String fileName);

controller:

@RequestMapping("esGoods2")
    public List<Goods> esGoods2(@RequestParam("index") String index, @RequestParam("str") String str, @RequestParam("fileName") String fileName) {
        System.out.println("esGoods2");
        return orderService.esGoods2(index,str,fileName);
    }

index:索引名称
str:查询的条件值
fileName:查询的字段

测试:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值