序言
目前了解到java整合Elasticsearch有3中方式cuiyaonan2000@163.com
- 使用Elasticsearch提供的9300端口的TCP协议进行交互---将在es8.X被取消
- 使用Elasticsearch提供的9200端口的HTTP协议进行交互(其中又分为Java Low Level REST Client和Java Hight Level REST Client)
- 使用springboot封装的就JPA的形式进行交互.(这个是我们主要的整合方式,同理不支持事务)
另外就是pringboot整合elasticsearch需要注意版本,不同的版本可能有不同的问题:这个肯定是去Springboot的官网去找cuiyaonan2000@163.com
官方网址: Spring Data Elasticsearch - Reference Documentation
这里使用的
- Elasticsearche:7.12.0
- springboot:2.5.0
demons
cui.yao.nan
0.0.1-SNAPSHOT
4.0.0
elasticsearch
UTF-8
UTF-8
1.8
2.7.3
org.apache.maven.plugins
maven-compiler-plugin
${java.version}
${java.version}
junit
junit
test
javax.servlet
javax.servlet-api
provided
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-data-elasticsearch
org.projectlombok
lombok
true
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 String 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 bookList = bookdao.findAll();
Iterable 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);
}
}
搜索结果