微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Elasticsearch On Springboot

序言

目前了解到java整合Elasticsearch有3中方式[email protected]

  1. 使用Elasticsearch提供的9300端口的TCP协议进行交互---将在es8.X被取消
  2. 使用Elasticsearch提供的9200端口的HTTP协议进行交互(其中又分为Java Low Level REST Client和Java Hight Level REST Client)
  3. 使用springboot封装的就JPA的形式进行交互.(这个是我们主要的整合方式)

另外就是pringboot整合elasticsearch需要注意版本,不同的版本可能有不同的问题:这个肯定是去Springboot的官网去找[email protected]

官方网址: https://docs.spring.io/spring-data/elasticsearch/docs/4.2.4/reference/html/#preface.requirements

整合

这里使用的

  1. Elasticsearche:7.12.0
  2. springboot:2.5.0

pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>demons</artifactId>
        <groupId>cui.yao.nan</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>elasticsearch</artifactId>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <dubbo.version>2.7.3</dubbo.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>



    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

    </dependencies>

</project>

domain

package cui.yao.nan.elasticsearch.domain;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;

@Data
@Document(indexName = "book")
public class Book {

    @Id
    private Long id;

    @Field(name="name")
    private String name;

    @Field(name = "price")
    private Long price;

}

@Document

@Persistent
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Document {

    String indexName();//索引库的名称,个人建议以项目的名称命名

    @Deprecated
    String type() default "";//类型,7.x之后以废弃

    short shards() default 1;//认分区数

    short replicas() default 1;//每个分区认的备份数

    String refreshInterval() default "1s";//刷新间隔

    String indexStoreType() default "fs";//索引文件存储类型

    boolean createIndex() default true; //是否创建索引

    VersionType versionType() default VersionType.EXTERNAL; //版本
}

@Field

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
@Inherited
public @interface Field {

    @AliasFor("name")
    String value() default ""; //属性别名

    @AliasFor("value")
    String name() default ""; //属性别名

    FieldType type() default FieldType.Auto; //属性类型,自动根据参数类型自动属性的类型

 	boolean index() default true; //认情况下分词

    DateFormat format() default DateFormat.none; //时间格式化

    String pattern() default "";

    boolean store() default false; //认情况下不存储原文

    String searchAnalyzer() default ""; //指定字段搜索时使用的分词器

    String indexAnalyzer() default "";//指定字段建立索引时指定的分词器

    String[] ignoreFields() default {};//忽略某些字段

    //以下是一些不常用的设置
    boolean includeInParent() default false;
    String[] copyTo() default {};
    int ignoreAbove() default -1;
    boolean coerce() default true;
    boolean docValues() default true;
    boolean ignoreMalformed() default false;
    IndexOptions indexOptions() default IndexOptions.none;
    boolean indexPhrases() default false;
    IndexPrefixes[] indexPrefixes() default {};
    boolean norms() default true;
    String nullValue() default "";
    int positionIncrementGap() default -1;
    Similarity similarity() default Similarity.Default;
    TermVector termVector() default TermVector.none;
    double scalingFactor() default 1;
    int maxShingleSize() default -1;
}

Service

package cui.yao.nan.elasticsearch.service;

import cui.yao.nan.elasticsearch.dao.ArticleRepository;
import cui.yao.nan.elasticsearch.dao.BookRepository;
import cui.yao.nan.elasticsearch.domain.Article;
import cui.yao.nan.elasticsearch.domain.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ArticleService {

    @Autowired
    private ArticleRepository articledao;

    @Autowired
    private BookRepository bookdao;

    public void add(){
        Article article = new Article();
        article.setDes("我是文章的没描述");
        article.setName("我是文章的名字");
        Book book = new Book();
        book.setPrice(12l);
        book.setName("我是书本的名字");
        articledao.save(article);
        bookdao.save(book);
    }

    public void search(){

        Iterable<Book> bookList = bookdao.findAll();

        Iterable<Article> articleList = articledao.findAll();

        System.out.println(bookList.toString()+" "+articleList.toString());

    }


}

Launch Class

package cui.yao.nan.elasticsearch;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyConfig {


    // 这里在war形式下就没什么用了
    public static void main(String[] args) {
    	SpringApplication.run(MyConfig.class, args);
    }
    

}

搜索结果

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐