最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java注解之Elasticsearch的案例詳解

 更新時(shí)間:2022年10月16日 10:09:21   作者:湘王  
學(xué)會(huì)了技術(shù)就要使用,否則很容易忘記,因?yàn)樽匀唤鐗焊筒淮嬖谑裁创a、變量之類的玩意,這都是一些和生活常識(shí)格格不入的東西。這篇文章主要介紹了Java中Elasticsearch的案例,感興趣的可以了解一下

學(xué)會(huì)了技術(shù)就要使用,否則很容易忘記,因?yàn)樽匀唤鐗焊筒淮嬖谑裁创a、變量之類的玩意,這都是一些和生活常識(shí)格格不入的東西。只能多用多練,形成肌肉記憶才行。

在一次實(shí)際的產(chǎn)品開(kāi)發(fā)中,由于業(yè)務(wù)需求的緣故,需要使用Elasticsearch搜索引擎。搜索引擎是通過(guò)索引和文檔檢索數(shù)據(jù)的,索引類似于MySQL的數(shù)據(jù)庫(kù),而文檔類似于MySQL的表。要想使用搜索引擎,就必須事先創(chuàng)建索引和文檔。

有兩種解決方案可以實(shí)現(xiàn):

第一種方案是把創(chuàng)建索引和文檔的語(yǔ)句直接集成在代碼里,每次啟動(dòng)時(shí)都檢查相應(yīng)的索引、文檔是否存在,不存在就創(chuàng)建;

第二種方案是通過(guò)腳本的形式,把每個(gè)索引和文檔的創(chuàng)建語(yǔ)句都保存下來(lái),如果有字段改動(dòng)則刪除,再重新創(chuàng)建。

考慮到開(kāi)發(fā)時(shí)字段可能會(huì)經(jīng)常變動(dòng),此時(shí)就必然會(huì)導(dǎo)致修改代碼,所以采取第二種方案時(shí)既要修改代碼,又要同時(shí)修改腳本,否則會(huì)報(bào)錯(cuò),比較費(fèi)事。而采用第一種方案,只需要?jiǎng)h掉索引和文檔再重新啟動(dòng)應(yīng)用就可以了,不必再單獨(dú)執(zhí)行腳本,非常方便,也不容易忘記。綜合開(kāi)發(fā)進(jìn)度及其他現(xiàn)實(shí)因素,決定采用第一種方案來(lái)解決創(chuàng)建索引和文檔的問(wèn)題。

這里不打算創(chuàng)建一個(gè)完整的項(xiàng)目,只需要演示用Java創(chuàng)建Elasticsearch索引相關(guān)部分就行了。

即使是這么一點(diǎn)內(nèi)容,代碼量也不少,對(duì)于初學(xué)者來(lái)說(shuō)仍然有些復(fù)雜,所以決定分為兩部分來(lái)講。

今天先來(lái)準(zhǔn)備一下「材料」。事先聲明:這里的代碼都是應(yīng)用于本地Elasticsearch服務(wù)的,而不是云原生服務(wù),否則代碼和配置等內(nèi)容會(huì)有很大不同。

首先,引入所需要的依賴:

<!-- Elasticsearch相關(guān)依賴 -->

<dependency>

    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <exclusions>

        <exclusion>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
        </exclusion>

        <exclusion>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>

    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-client</artifactId>
</dependency>

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

<!-- fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.68</version>
</dependency>

<!-- apache commons -->

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
</dependency>

然后修改application.properties屬性文件:

## ELASTICSEARCH

spring.elastic.rhlc.schema=http

spring.elastic.rhlc.hosts=127.0.0.1:9200

spring.elastic.rhlc.username=elastic

spring.elastic.rhlc.password=123456

spring.elastic.rhlc.connectTimeOut=5000

spring.elastic.rhlc.socketTimeOut=5000

spring.elastic.rhlc.connectionRequestTimeOut=10000

spring.elastic.rhlc.maxConnectNumber=10000

spring.elastic.rhlc.maxConnectPerRoute=8

接著,創(chuàng)建elasticsearch配置類:

/**
 * Elasticsearch配置類
 *
 * @author xiangwang
 */
@Configuration
public class ElasticConfiguration {
    @Value("${spring.elastic.rhlc.schema}")
    private String schema;
    @Value("${spring.elastic.rhlc.hosts}")
    private String hosts;
    @Value("${spring.elastic.rhlc.username}")
    private String username;
    @Value("${spring.elastic.rhlc.password}")
    private String password;
    @Value("${spring.elastic.rhlc.connectTimeOut}")
    private int connectTimeOut;
    @Value("${spring.elastic.rhlc.socketTimeOut}")
    private int socketTimeOut;
    @Value("${spring.elastic.rhlc.connectionRequestTimeOut}")
    private int connectionRequestTimeOut;

    @Bean
    public RestHighLevelClient client() {
        String[] hosts = this.hosts.split(",");
        HttpHost[] httpHosts = new HttpHost[hosts.length];
        for (int i = 0; i < hosts.length; i++) {
            httpHosts[i] = new HttpHost(hosts[i].split(":")[0], Integer.parseInt(hosts[i].split(":")[1]), schema);
        }
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
        RestClientBuilder builder = RestClient.builder(httpHosts).setRequestConfigCallback(requestConfigBuilder -> {
            requestConfigBuilder.setConnectTimeout(connectTimeOut);
            requestConfigBuilder.setSocketTimeout(socketTimeOut);
            requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeOut);
            return requestConfigBuilder;
        }).setHttpClientConfigCallback(httpClientBuilder -> {
            httpClientBuilder.disableAuthCaching();
            return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
        });
        return new RestHighLevelClient(builder);
    }
}

上面這些都屬于常規(guī)動(dòng)作,沒(méi)啥好說(shuō)明的。

接下來(lái),還是按照昨天的套路進(jìn)行:

先創(chuàng)建elasticsearch字段類型枚舉:

/**
 * elastic字段類型枚舉
 *
 * @author xiangwang
 */
public enum FieldType {
    Auto("auto"),
    Text("text"),
    Keyword("keyword"),
    Long("long");

    public String value;

    private FieldType(final String value) {
        this.value = value;
    }

    public static String getValue(final String value) {
        for (FieldType field : FieldType.values()) {
            if (field.getValue().equalsIgnoreCase(value)) {
                return field.value;
            }
        }
        return null;
    }

    public String getValue() {
        return value;
    }

    public void setValue(final String value) {
        this.value = value;
    }
}

然后創(chuàng)建elasticsearch的字段:

/**
 * elastic字段注解,定義每個(gè)elasticsearch字段上的屬性
 *
 * @author xiangwang
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
@Inherited
public @interface DocField {
    @AliasFor("name")
    String value() default "";

    @AliasFor("value")
    String name() default "";

    FieldType type() default FieldType.Auto;

    boolean index() default false;

    String format() default "";

    String pattern() default "";

    boolean store() default false;

    boolean fielddata() default false;

    String searchAnalyzer() default "";

    String analyzer() default "";

    String normalizer() default "";
}

以上就是Java注解之Elasticsearch的案例詳解的詳細(xì)內(nèi)容,更多關(guān)于Java Elasticsearch的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Servlet+JavaBean+JSP打造Java Web注冊(cè)與登錄功能

    Servlet+JavaBean+JSP打造Java Web注冊(cè)與登錄功能

    比作MVC的話,控制器部分采用Servlet來(lái)實(shí)現(xiàn),模型部分采用JavaBean來(lái)實(shí)現(xiàn),而大部分的視圖采用Jsp頁(yè)面來(lái)實(shí)現(xiàn),接下來(lái)我們就來(lái)詳細(xì)看看如何用Servlet+JavaBean+JSP打造Java Web注冊(cè)與登錄功能
    2016-05-05
  • SpringCloud項(xiàng)目中集成Sentinel問(wèn)題

    SpringCloud項(xiàng)目中集成Sentinel問(wèn)題

    在SpringCloud項(xiàng)目中集成Sentinel,可以實(shí)現(xiàn)流量控制、熔斷降級(jí)等功能,提升系統(tǒng)穩(wěn)定性和可用性,集成步驟包括添加Sentinel依賴、配置控制臺(tái)地址、啟動(dòng)控制臺(tái)、配置限流熔斷規(guī)則、使用注解和集成SpringCloudGateway,這有助于處理高并發(fā)場(chǎng)景,保護(hù)服務(wù)穩(wěn)定運(yùn)行
    2024-10-10
  • Java 執(zhí)行CMD命令或執(zhí)行BAT批處理方式

    Java 執(zhí)行CMD命令或執(zhí)行BAT批處理方式

    這篇文章主要介紹了Java 執(zhí)行CMD命令或執(zhí)行BAT批處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringShell命令行之交互式Shell應(yīng)用開(kāi)發(fā)方式

    SpringShell命令行之交互式Shell應(yīng)用開(kāi)發(fā)方式

    本文將深入探討Spring Shell的核心特性、實(shí)現(xiàn)方式及應(yīng)用場(chǎng)景,幫助開(kāi)發(fā)者掌握這一強(qiáng)大工具,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • IDEA添加Java類注釋模版的方法

    IDEA添加Java類注釋模版的方法

    本篇文章主要介紹了IDEA添加Java類注釋模版的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • MyBatis 參數(shù)類型為String時(shí)常見(jiàn)問(wèn)題及解決方法

    MyBatis 參數(shù)類型為String時(shí)常見(jiàn)問(wèn)題及解決方法

    這篇文章主要介紹了MyBatis 參數(shù)類型為String時(shí)常見(jiàn)問(wèn)題及解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03
  • Mybatis分頁(yè)插件PageHelper手寫(xiě)實(shí)現(xiàn)示例

    Mybatis分頁(yè)插件PageHelper手寫(xiě)實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了Mybatis分頁(yè)插件PageHelper手寫(xiě)實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 淺談十個(gè)常見(jiàn)的Java異常出現(xiàn)原因

    淺談十個(gè)常見(jiàn)的Java異常出現(xiàn)原因

    這篇文章主要介紹了十個(gè)常見(jiàn)的Java異常出現(xiàn)原因,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Eclipse?Jetty?server漏洞解決辦法

    Eclipse?Jetty?server漏洞解決辦法

    最近給?個(gè)客戶部署項(xiàng)?,但是客戶的安全稽核有點(diǎn)變態(tài),居然說(shuō) Eclipse Jetty Server?危漏洞,這篇文章主要給大家介紹了關(guān)于Eclipse?Jetty?server漏洞解決的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • java調(diào)用c程序通信示例代碼

    java調(diào)用c程序通信示例代碼

    這篇文章主要介紹了java調(diào)用c程序通信示例,大家參考使用吧
    2013-12-12

最新評(píng)論

商水县| 平乡县| 泰来县| 江华| 灌南县| 衡东县| 阳城县| 岑巩县| 娄烦县| 社旗县| 九江市| 公安县| 湖北省| 新蔡县| 乃东县| 海淀区| 江永县| 邳州市| 襄垣县| 丰镇市| 哈巴河县| 丹巴县| 筠连县| 昭觉县| 温泉县| 新宁县| 舒城县| 潮州市| 青铜峡市| 南通市| 吉安县| 梓潼县| 白山市| 齐河县| 江都市| 慈利县| 绍兴县| 巩义市| 锡林郭勒盟| 措美县| 怀集县|