SpringBoot集成ElasticSearch全⽂搜索(步骤⾮常的详细)⽬录
⼀、l配置
SpringBoot版本1.5.6
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
注意es版本、es服务端版本、ik分词器版本
缺点
SpringDataES不⽀持摘要和⾼亮展⽰,需要⼿写
⼆、项⽬代码集成⽰例
Yml配置
spring:
data:
elasticsearch:
cluster-name: elasticsearch#默认即为elasticsearch
# 没有部署es的时候这个地⽅注释掉如果没有指定,则启动ClientNode
cluster-nodes: 172.31.3.223:9300 #配置es节点信息,逗号分隔
springboot结构这些配置的属性,最终会设置到org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchProperties这个实体中。存储映射实体
@Document(indexName = "picocr_index", type = "picocr", shards = 5,
replicas = 1, indexStoreType = "fs", refreshInterval = "-1")
public class PicOcr implements Serializable {
private static final long serialVersionUID = 551589397625941750L;
/** 图⽚id */
@Id
// @Field(index = _analyzed, store = true, type = FieldType.Long)
private Long id;
/** 案件id */
@Field(index = _analyzed, store = true, type = FieldType.Long)
private Long caseId;
/** folderId */
@Field(index = _analyzed, store = true, type = FieldType.String)
private String nId;
/** 图⽚名称 */
@Field(index = FieldIndex.analyzed, store = true, type = FieldType.String,searchAnalyzer = "ik", analyzer = "ik")    private String title;
/** 图⽚ocr内容 */
@Field(index = FieldIndex.analyzed, store = true, type = FieldType.String,searchAnalyzer = "ik", analyzer = "ik")    private String content;
// 省略 get set
}
indexName必须⼩写,否则报错 indexName = "picocr_index"
@Document注解
@Persistent
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Document {
String indexName();//索引库的名称,个⼈建议以项⽬的名称命名
String type() default "";//类型,个⼈建议以实体的名称命名
short shards() default 5;//默认分区数
short replicas() default 1;//每个分区默认的备份数
String refreshInterval() default "1s";//刷新间隔
String indexStoreType() default "fs";//索引⽂件存储类型
}
@Field注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
@Inherited
public @interface Field {
FieldType type() default FieldType.Auto;#⾃动检测属性的类型
FieldIndex index() default FieldIndex.analyzed;#默认情况下分词
DateFormat format() ;
String pattern() default "";
boolean store() default false;#默认情况下不存储原⽂
String searchAnalyzer() default "";#指定字段搜索时使⽤的分词器
String indexAnalyzer() default "";#指定字段建⽴索引时指定的分词器
String[] ignoreFields() default {};#如果某个字段需要被忽略
boolean includeInParent() default false;
}
创建Repository
public interface PicOcrRepository extends ElasticsearchRepository<PicOcr, Long> {
/**
*
* @description 根据参数删除符合jpa规范
*              注意:调⽤这个⽅法后,要调⽤ refesh⽅法,否则删除不⽣效
* @author lli
* @create 2018年6⽉14⽇下午5:06:45
* @version 1.0
* @param caseId
* @param nId
* @return
*/
Long deleteByCaseIdAndNId(Long caseId, String nId);
}
三、安装ES
保障版本⼀致性,由于前⾯jar包依赖的是2.4.5版本,故服务端选择2.4.6 或者5版本⼩版本不⼀致没什么问题下载安装ES
选择对应的版本即可
测试默认分词
测试标准分词浏览器请求测试,地址如下:
四、Ik分词器安装
地址如上
版本关系如下:
下载到对应IK版本的zip包后,放⼊到ES的plugins⽂件夹下解压,⽬录结构如下:
测试IK分词效果
浏览器输⼊如下地址:
这⾥可以选择多种模式 默认是更多分词
analyzer:
ik:
alias: [ik_analyzer]
type: org.elasticsearch.index.analysis.IkAnalyzerProvider
ik_max_word:
type: ik
use_smart: false
ik_smart:
type: ik
use_smart: true
注意:安装ik后要重启es
安装Elasticsearch-Head 插件
五、API测试
增加、更新
PicOcr b = new PicOcr();
b.setCaseId(123L);
b.setId(300L);
b.setnId("1215abkjsdkjf");
b.setContent("中华⼈民共和国12");
b.setTitle("中华⼈民共和国12333");
删除
// 通过主键删除
aa.delete(300L);
// 通过⾃定义删除,必须调⽤下refresh,否则删除不⽣效        aa.deleteByCaseIdAndNId(123L, "12333");
简单查询
// 查询全部,分页等
aa.findAll();
// ⾃定义条件查询
QueryBuilder query = QueryBuilders.boolQuery()
.Query("id", "1"))
.Query("content", "⼈民")); Iterable<PicOcr> test = aa.search(query);
⾼亮、摘要查询

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。