全文检索技术ElasticSearch使用

Java 语言全文检索技术简介

Lucene 就是一套 全文检索 编程 API , 基于 Lucene 对数据建立索引,进行查询  

什么是 ElasticSearch ?

现在企业开发中,更常用是的 solr 搜索服务器和 ElasticSearch 搜索服务器
3. ElasticSearch 安装配置使用入门

官网: https://www.elastic.co/products/elasticsearch

Window 系统下载 zip 版本,linux 系统下载 tar 版本  

bin 存放 elasticSearch 运行命令 config 存放配置文件 lib 存放 elasticSearch 运行依赖 jar 包 modules 存放 elasticSearch 模块 plugins 存放插件

运行 elasticSearch/bin/elasticsearch.bat 文件
配置 JAVA_HOME 环境变量

访问 http://127.0.0.1:9200

4. ElasticSearch 插件安装 es head
%elasticsearch%/bin/plugin.bat install mobz/elasticsearch-head

访问 http://localhost:9200/_plugin/head/

5. ElasticSearch 基本操作入门
参考书籍 : Elasticsearch 服务器开发(第 2 版).pdf

全文检索: 针对文本中每个词,创建词条建立索引,进行搜索。
ElasticSearch 操作服务器上的数据,通过 Rest API

如果操作 Elasticsearch 上数据,访问提供 Rest API 的 URL 地址,传递 json 数据给服务器

5.1. ElasticSearch 基础 数据架构的主要概念

图解
索引对象: 存储数据的表结构 ,任何搜索数据,存放在索引对象上
映射: 数据如何存放到索引对象上,需要有一个映射配置, 数据类型、是否存储、是否分词 …
文档: 一条数据记录, 存在索引对象上
文档类型: 一个索引对象 存放多种类型数据, 数据用文档类型进行标识
编程: 建立索引对象 — 建立映射 — 存储数据【文档】 — 指定文档类型进行搜索数据【文档】
5.2. 新建文档(自动创建索引和映射 )
1、需要新建 maven 项目

2、基于 maven 的 pom 导入坐标依赖

ElasticSearch2.4.0 依赖 lucene5.5.2 版本  

当直接在 ElasticSearch 建立文档对象时,如果索引不存在的,默认会自动创建,映射采用默认方式
ElasticSearch 服务默认端口 9300
Web 管理平台端口 9200

3、建立文档, 自动创建索引

自动创建索引

自动创建索引映射

文档数据 (type 文档类型 )

5.3. 搜索文档数据
查询数据 主要依赖 QueryBuilder 对象 ,可以通过 QueryBuilders 获取
boolQuery() 布尔查询,可以用来组合多个查询条件
fuzzyQuery() 相似度查询 matchAllQuery() 查询所有数据 regexpQuery() 正则表达式查询 termQuery() 词条查询 wildcardQuery() 模糊查询

6. 各种查询对象 Query 的使用
ElasticSearch 支持所有 Lucene 查询,并对其进行简化封装
TermQuery 词条查询
WildcardQuery 模糊查询
FuzzyQuery 相似度查询
BooleanQuery 布尔查询

1、ElasticSearch 提供 QueryBuileders.queryStringQuery(搜索内容) 查询方法,对所有字段进
行分词查询

2、只想查询 content 里包含全文 ,使用 wildcardQuery 磨合查询 *任意字符串 ?任意单个字符

发现查询不到!!!! ,涉及词条查询理解, 说明没有词条包含“全文”
3、查询 content 词条为“搜索” 内容,使用 TermQuery
发现查询不到!!! ,说明没有 “搜索”这个词条

词条: 就是将文本内容存入搜索服务器,搜索服务器进行分词之后内容
“ElasticSearch 是一个基于 Lucene 的搜索服务器”
分词(好的): ElasticSearch、是、一个、基于、Lucene、搜索、服务、服务器 默认分词(差): ElasticSearch、 是、一、个、基、于、搜、索

搜索“全面” 能够查询到

7. IK 分词器和 ElasticSearch 集成使用
ElasticSearch 默认采用分词器, 单个字分词 ,效果很差

下载 https://github.com/medcl/elasticsearch-analysis-ik/tree/2.x

1、下载开源项目

2、打包 ik 分词器
mvn clean 清空 mvn package 打包

3、进入 target/release 目录 将下列文件 ,拷贝到 %es%/plugins/analysis-ik

4、进入 target/release/config 目录
将所有配置文件,复制 %es%/config 下

5、配置 elasticsearch.yml

6、重启 es

发现 ik 分词器被加载

7、访问
http://localhost:9200/_analyze?analyzer=ik&pretty=true&text=我是中国人

8. ElasticSearch 常用编程操作
在 ElasticSearch 没有索引情况下,插入文档,默认创建索引和索引映射 (无法使用 ik 分词器)
8.1. 索引相关操作
创建索引

默认创建好索引,mappings 为空

删除索引

8.2. 映射相关操作

调用 client.admin().indices().putMapping(mapping).get();

8.3. 文档相关操作
 建立文档
1、直接在 XContentBuilder 中构建 json 数据,建立文档

2、对一个已经存在对象,转换为 json ,建立文档

如何将 Article 对象,转换为 json 数据 ---- Jackson 转换开发包 Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。
引入 jackson
1.x

org.codehaus.jackson
jackson-core-asl
1.9.13


org.codehaus.jackson
jackson-mapper-asl
1.9.13

2.x

com.fasterxml.jackson.core
jackson-core
2.8.1


com.fasterxml.jackson.core
jackson-databind
2.8.1


com.fasterxml.jackson.core
jackson-annotations
2.8.1

修改文档
方式一: 使用 prepareUpdate、prepareIndex 都可以

方式二: 直接使用 update

删除文档
方式一: prepareDelete

方式二: 直接使用 delete

8.4. 查询文档分页操作
1、批量向数据表 插入 100 条记录

2、分页查询
searchRequestBuilder 的 setFrom【从 0 开始】 和 setSize【查询多少条】方法实现

8.5. 查询结果高亮显示
在百度搜索 jackson

页面源码分析

1、配置应用高亮

2、对结果的高亮片段做拼接处理,替换原有内容

9. Spring Data ElasticSearch 使用
9.1. Spring Data ElasticSearch 简介

什么是 spring data elasticSearch ?
Spring Data ElasticSearch 基于 spring data API 简化 elasticSearch 操作 , 将原始操作 elasticSearch 的客户端 API 进行封装

官方网站:http://projects.spring.io/spring-data-elasticsearch/
下载官方规范文档

Maven 坐标


org.springframework.data
spring-data-elasticsearch
2.0.4.RELEASE


9.2. Spring Data ElasticSearch 入门案例
1、创建 maven 工程

2、基于 maven 导入坐标
Spring data elasticsearch 对 elasticsearch api 简化封装

导入 spring-test 和 junit 编写测试用例

Slf4j-log4j 日志包  

3、在 src/main/resources 下建立 applicationContext.xml 和 log4j.properties 引入 spring data elasticsearch 名称空间

4、创建 domain、dao、service 包

5、编写 DAO

编写 DAO 自动操作 elasticsearch 继承 ElasticsearchRepository 接口

配置 applicationContext.xml

6、编写 Service

配置 applicationContext.xml

7、配置 applicationContext.xml 连接 elasticsearch

8、索引和映射如何创建 — 基于 spring data elasticsearch 注解 在使用 spring data elasticsearch 开发, 需要将索引和映射信息 配置实体类上面
@Document 文档对象 (索引信息、文档类型 )
@Id 文档主键 唯一标识
@Field 每个文档的字段配置(类型、是否分词、是否存储、分词器 )

通过 ElasticsearchTemplate 创建索引和添加映射

错误: 导包冲突
java.lang.NoClassDefFoundError: org/springframework/core/ResolvableTypeProvider
解决: spring 导包版本要一致

错误: MapperParsingException[No type specified for field [title]]
解决: 配置类型

9、Spring data Search CRUD 操作
CurdRepository 提供增删改查 save、delete、findAll 、findOne
PagingAndSortingRepository 提供分页和排序

10、条件查询 (分页)

查询标题方法

分页条件查询,只需要在查询方法中,添加 Pageable 对象排序条件查询,只需要在查询方法中,添加 Sort 对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沙门空海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值