SpingBoot:統合Elasticsearch7.2.0

春のブート2.1.Xは問題Elasticsearch最新バージョンに統合
春ブーツ春-ブートstarter-の新バージョンデータ-elasticsearch 2をElasticsearchバージョン2.xのサポートではなく、Elasticsearchは、実際には、バージョン7.2.Xに開発されて、順番に活用にelasticsearch新しい機能ので、放棄されたばねブートスタータDATA- elasticsearchの依存、および、新しいバージョンのサポートを可能にするために、対応関係の現在のバージョンを春データelasticsearchの使用を指示します次のように

輸送、残り:Elasticsearch(ES)は、2つの接続があります。HTTP APIを使用してTCP ES(Javaのみをサポートしています)、残りのアクセスES(無言語の制限)の方法により、交通機関のアクセス。
ESの関係者は、バージョン7.0での輸送が8.Xバージョンでの使用、廃棄のために推奨されていない、残りのモードをお勧めします。

依存性の導入:

        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>${elasticsearch.version}</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>${elasticsearch.version}</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>${elasticsearch.version}</version>
        </dependency>

application.yml設定:

elasticsearch:
  ip: 192.168.52.132:9200

クライアント接続の設定クラス

package com.dc.elastic.configuration;

import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Arrays;
import java.util.Objects;

/**
 * 描述: 连接客户端
 *
 * @author leo
 * @create 2019-08-25 13:22
 */
@Configuration
public class ElasticsearchRestClient
{
    /**
     * 超时时间设为5分钟
     */
    private static final int TIME_OUT = 5 * 60 * 1000;
    private static final int ADDRESS_LENGTH = 2;
    private static final String HTTP_SCHEME = "http";

    @Value("${elasticsearch.ip}")
    String[] ipAddress;

    @Bean
    public RestClientBuilder restClientBuilder() {
        System.err.println(ipAddress);
        HttpHost[] hosts = Arrays.stream(ipAddress)
                .map(this::makeHttpHost)
                .filter(Objects::nonNull)
                .toArray(HttpHost[]::new);
        return RestClient.builder(hosts);
    }

    @Bean(name = "highLevelClient")
    public RestHighLevelClient highLevelClient(@Autowired RestClientBuilder restClientBuilder) {
        restClientBuilder.setRequestConfigCallback(
                new RestClientBuilder.RequestConfigCallback() {
                    @Override
                    public RequestConfig.Builder customizeRequestConfig(
                            RequestConfig.Builder requestConfigBuilder) {
                        return requestConfigBuilder.setSocketTimeout(TIME_OUT);
                    }
                });
        //TODO 此处可以进行其它操作
        return new RestHighLevelClient(restClientBuilder);
    }


    private HttpHost makeHttpHost(String s) {
        assert StringUtils.isNotEmpty(s);
        String[] address = s.split(":");
        if (address.length == ADDRESS_LENGTH) {
            String ip = address[0];
            int port = Integer.parseInt(address[1]);
            System.err.println(ip+"+"+port);
            return new HttpHost(ip, port, HTTP_SCHEME);
        } else {
            return null;
        }
    }
}

テストコントローラ

 @RequestMapping("/test")
    public void test(@RequestParam String keyword) {
        Integer pageIndex = 1;
        Integer pageSize = 5;
        String indexName = "vw_ods";
        Map<String, Object> data = new HashMap<>();
        data.put("clearacctname", keyword);

        List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
        SearchRequest searchRequest = new SearchRequest(indexName);
        // searchRequest.types(indexName);
        queryBuilder(pageIndex, pageSize, data, indexName, searchRequest);
        try {
            SearchResponse response = highLevelClient.search(searchRequest, RequestOptions.DEFAULT);
            for (SearchHit hit : response.getHits().getHits()) {
                Map<String, Object> map = hit.getSourceAsMap();
                map.put("id", hit.getId());
                result.add(map);

                // 取高亮结果
                Map<String, HighlightField> highlightFields = hit.getHighlightFields();
                HighlightField highlight = highlightFields.get("clearacctname");
                Text[] fragments = highlight.fragments(); // 多值的字段会有多个值
                String fragmentString = fragments[0].string();
                System.out.println("高亮:" + fragmentString);
            }
            System.out.println("pageIndex:" + pageIndex);
            System.out.println("pageSize:" + pageSize);
            System.out.println(response.getHits().getTotalHits());
            System.out.println(result.size());
            for (Map<String, Object> map : result) {
                System.out.println(map.get("clearacctname"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void queryBuilder(Integer pageIndex, Integer pageSize, Map<String, Object> query, String indexName,
                              SearchRequest searchRequest) {
        if (query != null && !query.keySet().isEmpty()) {
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            if (pageIndex != null && pageSize != null) {
                searchSourceBuilder.size(pageSize);
                if (pageIndex <= 0) {
                    pageIndex = 0;
                }
                searchSourceBuilder.from((pageIndex - 1) * pageSize);
            }
            BoolQueryBuilder boolBuilder = QueryBuilders.boolQuery();
            query.keySet().forEach(key -> {
                boolBuilder.must(QueryBuilders.matchQuery(key, query.get(key)));

            });
            searchSourceBuilder.query(boolBuilder);

            HighlightBuilder highlightBuilder = new HighlightBuilder();
            HighlightBuilder.Field highlightTitle =
                    new HighlightBuilder.Field("title").preTags("<strong>").postTags("</strong>");
            highlightTitle.highlighterType("unified");
            highlightBuilder.field(highlightTitle);
            searchSourceBuilder.highlighter(highlightBuilder);

            SearchRequest source = searchRequest.source(searchSourceBuilder);
        }
    }

公式文書ます。https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.2/java-rest-overview.html

著者:傍観者
出典:3つの非若者のブログ
元:https://www.35youth.cn/712.html
著作権:この記事はブロガーオリジナル記事です、複製、ボーエンのリンクを添付してください!

おすすめ

転載: www.cnblogs.com/35youth/p/11408063.html