序言
目前了解到java整合Elasticsearch有3中方式[email protected]
- 使用Elasticsearch提供的9300端口的TCP协议进行交互---将在es8.X被取消
- 使用Elasticsearch提供的9200端口的HTTP协议进行交互(其中又分为Java Low Level REST Client和Java Hight Level REST Client)
- 使用springboot封装的就JPA的形式进行交互.(这个是我们主要的整合方式)
另外就是pringboot整合elasticsearch需要注意版本,不同的版本可能有不同的问题:这个肯定是去Springboot的官网去找[email protected]
官方网址: https://docs.spring.io/spring-data/elasticsearch/docs/4.2.4/reference/html/#preface.requirements
整合
这里使用的
- Elasticsearche:7.12.0
- 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] 举报,一经查实,本站将立刻删除。