LAPTOP-KB9HII50\70708 2 vuotta sitten
vanhempi
commit
7b050179d2

+ 6 - 0
starter/elasticsearch-starter/pom.xml

@ -29,6 +29,12 @@
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>${version.elasticsearch}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.elasticsearch</groupId>
                    <artifactId>elasticsearch</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>

+ 74 - 6
starter/elasticsearch-starter/src/main/java/com/yihu/jw/elasticsearch/ElasticSearch7Helper.java

@ -13,6 +13,8 @@ import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
@ -21,13 +23,19 @@ import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
@ -181,16 +189,76 @@ public class ElasticSearch7Helper {
        return !bulkResponse.hasFailures();
    }
//    public SearchResult search(String index, String type, String queryStr) throws IOException {
//        Search search = ((new Search.Builder(queryStr)).addIndex(index)).addType(type).build();
//        SearchResult result = jestClient.execute(search);
//        this.logger.info("search data count: " + result.getTotal());
//        return result;
//    }
    public <T> List<T> search(String index, SearchSourceBuilder queryStr,Class<T> beanClass) throws Exception {
        SearchRequest request = new SearchRequest().indices(index).source(queryStr);
        //带入请求执行查询
        SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        //得到查询结果
        SearchHits hits = searchResponse.getHits();
        SearchHit[] searchHits = hits.getHits();
        List<T> listData = new ArrayList<>();
        //遍历查询结果
        for(SearchHit hit : searchHits){
            Map<String,Object> datas = hit.getSourceAsMap();
            T t = beanClass.newInstance();
            BeanUtils.copyProperties(t,datas);
            listData.add(t);
            logger.info(datas.toString());
        }
        return listData;
    }
    public List<String> search(String index, SearchSourceBuilder queryStr) throws Exception {
        SearchRequest request = new SearchRequest().indices(index).source(queryStr);
        //带入请求执行查询
        SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        //得到查询结果
        SearchHits hits = searchResponse.getHits();
        SearchHit[] searchHits = hits.getHits();
        List<String> listData = new ArrayList<>();
        //遍历查询结果
        for(SearchHit hit : searchHits){
            String datas = hit.getSourceAsString();
            listData.add(datas);
            logger.info(datas);
        }
        return listData;
    }
    public int esCount(String index, SearchSourceBuilder queryStr) throws Exception{
        SearchRequest request = new SearchRequest().indices(index).source(queryStr);
        //带入请求执行查询
        SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        //得到查询结果
        SearchHits hits = searchResponse.getHits();
        SearchHit[] searchHits = hits.getHits();
        return searchHits.length;
    }
    public String search(String index, String id) throws IOException {
        GetRequest request = new GetRequest(index, id.toString());
        GetResponse getResponse = restHighLevelClient.get(request, RequestOptions.DEFAULT);
        return getResponse.getSourceAsString();
    }
    public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {
        if (map == null)
            return null;
        Object obj = beanClass.newInstance();
        Field[] fields = obj.getClass().getDeclaredFields();
        for (Field field : fields) {
            int mod = field.getModifiers();
            if(Modifier.isStatic(mod) || Modifier.isFinal(mod)){
                continue;
            }
            field.setAccessible(true);
            field.set(obj, map.get(field.getName()));
        }
        return obj;
    }
}

+ 3 - 51
starter/elasticsearch-starter/src/main/java/com/yihu/jw/elasticsearch/ElasticSearch7Pool.java

@ -53,11 +53,11 @@ import java.util.concurrent.TimeUnit;
@Component
public class ElasticSearch7Pool {
    @Value("${ElasticSearch.Hosts}")
    @Value("${es.host}")
    private String hosts;
    @Value("${ElasticSearch.UserName}")
    @Value("${es.user}")
    private String userName;
    @Value("${ElasticSearch.Password}")
    @Value("${es.password}")
    private String password;
    @SuppressWarnings("deprecation")
@ -278,53 +278,5 @@ public class ElasticSearch7Pool {
            System.out.println(hit.getSourceAsMap());
        }
    }
    /**
     * 查询结果高亮显示
     */
    public void testSearch1(RestHighLevelClient restHighLevelClient,String index) throws IOException {
        SearchRequest request = new SearchRequest(index);
        //构建搜索条件
        SearchSourceBuilder builder = new SearchSourceBuilder();
        //查询条件,我们可以使用QueryBuilders工具来实现
        //QueryBuilders.matchAllQuery() 匹配所有
        //QueryBuilders.termQuery() 精确匹配
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", "java");
        builder.query(termQueryBuilder);
        builder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        //分页查询,第0页 每页30
        builder.from(0);
        builder.size(30);
        //设置高亮
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        //高亮显示的字段
        highlightBuilder.field("title");
        highlightBuilder.preTags("<em>");
        highlightBuilder.postTags("</em>");
        builder.highlighter(highlightBuilder);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(response.getHits()));
        System.out.println("----------------------");
        for (SearchHit hit : response.getHits().getHits()) {
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            System.out.println(sourceAsMap);
            //输出高亮情况
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            HighlightField highlightField = highlightFields.get("title");
            if (highlightField == null) continue;
            Text[] fragments = highlightField.getFragments();
            String title = "";
            for (Text fragment : fragments) {
                title += fragment;
            }
            //使用有高亮的结果替换原本的结果,
            sourceAsMap.put("title", title);
            System.out.println(sourceAsMap);
        }
    }
}

+ 40 - 3
starter/elasticsearch-starter/src/main/java/com/yihu/jw/elasticsearch/ElasticSearch7Util.java

@ -36,6 +36,7 @@ import org.nlpcn.es4sql.query.SqlElasticSearchRequestBuilder;
import org.nlpcn.es4sql.query.maker.QueryMaker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
@ -65,7 +66,7 @@ public class ElasticSearch7Util {
     * @param sql
     * @return
     */
    public Integer executeCountSQL(String sql) throws Exception {
    public Long executeCountSQL(String sql) throws Exception {
        //实例化查询请求对象
        SearchRequest request = new SearchRequest();
        //实例化SearchSourceBuilder
@ -92,11 +93,11 @@ public class ElasticSearch7Util {
                if (o instanceof Double){
                    Double valueTemp =Double.valueOf((Double)o);
                    DecimalFormat df = new DecimalFormat("######0");
                    return Integer.parseInt(df.format(valueTemp));
                    return Long.parseLong(df.format(valueTemp));
                }
            }
        }
        return 0;
        return 0L;
    }
    /**
@ -133,6 +134,42 @@ public class ElasticSearch7Util {
        return listData;
    }
    /**
     * 执行sql
     */
    public <T> List<T> executeSql(String sql,Class<T> clazz) throws Exception {
        //实例化查询请求对象
        SearchRequest request = new SearchRequest();
        //实例化SearchSourceBuilder
        SearchSourceBuilder searchBuilder = new SearchSourceBuilder();
        //根据索引、查询条件构建查询构造器
        BoolQueryBuilder boolQueryBuilder = createQueryBuilderBySql(sql);
        //将查询构造器注入SearchSourceBuilder
        searchBuilder.query(boolQueryBuilder);
        //设置请求查询的索引(查询构造器中已指定,无需重复设置)
        //request.indices(indexName);
        //将构建好的SearchSourceBuilder注入请求
        request.source(searchBuilder);
        //带入请求执行查询
        SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        //得到查询结果
        SearchHits hits = searchResponse.getHits();
        SearchHit[] searchHits = hits.getHits();
        List<T> listData = new ArrayList<>();
        //遍历查询结果
        for(SearchHit hit : searchHits){
            Map<String,Object> datas = hit.getSourceAsMap();
            T t = clazz.newInstance();
            BeanUtils.copyProperties(t,datas);
            listData.add(t);
            logger.info(datas.toString());
        }
        return listData;
    }
    /**
     * 构建查询构造器
     * @param indexName  索引名