Mark:如果看完之后还是有疑问,去百度云盘:heima2019/阶段4 2.Elasticsearch(选学)文件夹下有教案,那个比较系统。
- Lucene就是一套全文检索编程API,基于Lucene对数据建立索引,进行查询。
- 现代企业开发中,更常用的是solr搜索服务器和ElasticSearch搜索服务器。
下载与安装
- ElasticSearch官网
https://www.elastic.co/products/elasticsearch
- 下载
- Windows系统下载zip版本,linux版本下载tar版本
已经下载好的Elasticsearch安装文件
解压目录
bin存放elasticsearch运行命令
config存放配置文件
lib存放elasticsearch运行依赖jar包
modules存放elasticsearch模块
plugins存放插件
- 运行D:\elasticsearch-2.4.0\bin\elasticsearch.bat文件(JAVA_HOME环境变量要提前配置好)
- 访问:http://127.0.0.1:9200
elasticsearch安装ESHead插件
1.切换到elasticsearch 的运行命令目录,如:D:\elasticsearch-2.4.0\bin,执行如下命令:
plugin.bat install mobz/elasticsearch-head
2.访问http://localhost:9200/_plugin/head/
ElasticSearch数据架构的主要概念分析
参考书籍:Elasticsearch服务器开发(第2版).pdf
- 全文检索:针对文本中每个词,创建词条建立索引,进行搜索。
- ElasticSearch操作服务器上的数据,通过Rest API
操作ElasticSearch上数据,访问提供Rest API的URL地址,传递json数据给服务器
- 分析ElasticSearch数据架构的主要概念
1)索引对象(数据存在哪?):存储数据的表结构,任何搜索数据,存放在索引对象上
2)映射(数据怎么存?):数据如何存放到索引对象上,需要有一个映射配置,数据类型、是否存储、是否分词…
3)文档(存什么数据?):一条数据记录,存在索引对象上
4)文档类型(数据有哪些类型?):一个索引对象,存放多种类型数据,数据用文档类型进行标识
- Elasticsearch与传统数据库之间的关系
Elasticsearch—————— 传统关系型数据库
索引 ————————— 数据库
文档类型——————— 表
文档 ———————— 行
字段 ———————— 列
- 编程步骤
1)建立索引对象
2)建立映射
3)存储数据【文档】
4)指定文档类型进行搜索数据【文档】
5)查询数据【文档】
ElasticSearch入门案例_创建文档自动创建索引[会用]
步骤整理:
- 建maven项目
2.基于maven的pom导入坐标依赖
1)ElasticSearch2.4.0依赖lucene5.5.2
2)当直接在ElasticSearch建立文档对象时,如果索引不存在的,默认会自动创建,映射采用默认方式
3)ElasticSearch服务默认端口9300
4)Web管理平台端口 9200
3.建立文档,自动创建索引
1)自动创建索引
2)自动创建索引映射
3)查看文档数据和文档类型
elasticsearch分片,副本和集群
ElasticSearch入门案例_搜索文档[会用]
- 查询数据,主要依赖QueryBuilder对象,可以通过QueryBuilders获取(下面几个方法重点练习)
1)boolQuery() 布尔查询,可以用来组合多个查询条件
2)fuzzyQuery() 相似度查询
3)matchAllQuery() 查询所有数据
4)regexpQuery () 正则表达式查询
5)termQuery() 词条查询
6)wildcardQuery() 模糊查询
2. 代码示例
一些函数的解释:
TermsBuilder: 构造聚合函数
AggregationBuilders: 创建聚合函数工具类
BoolQueryBuilder: 拼装连接(查询)条件
QueryBuilders: 简单的静态工厂”导入静态”使用。主要作用是查询条件(关系),如区间\精确\多值等条件
NativeSearchQueryBuilder: 将连接条件和聚合函数等组合
SearchQuery:生成查询
elasticsearchTemplate.query:进行查询
Aggregations:Represents a set of computed addAggregation.代表一组添加聚合函数统计后的数据
本篇主要重elasticsearch的搭建和基础概念之类的,实际项目中多用spring data elasticsearch使用,重点是自定义查询和原生nativeSearchQuery的查询。
可参照这位博主:https://blog.csdn.net/lihuanlin93/article/details/83448967 ,Spring data elasticsearch总结的很好,很全面。
讲nativeSearchQuery的使用,参考:https://blog.csdn.net/weixin_41133233/article/details/82927408
涉及到高阶功能,组合查询、Aggregation聚合查询,参照这位博主:https://blog.csdn.net/Topdandan/article/details/81436141,写的非常的好。
实例:模拟商城多条件查询,搜索框+筛选项
Client client = getClient();
BoolQueryBuilder boolQueryBuilder =new BoolQueryBuilder();
TermQueryBuilder name =new TermQueryBuilder("name", "iphone");
//设置必须满足的名称为iPhone
boolQueryBuilder.must(name);
//获取过滤器对象
List<QueryBuilder> filter = boolQueryBuilder.filter();
//设置过滤条件
RangeQueryBuilder price=new RangeQueryBuilder("price").gte(5000).lte(8000);
TermQueryBuilder country =new TermQueryBuilder("country", "cn");
filter.add(price);
filter.add(country);
//准备搜索对象,并拿到响应 排序(sort),分页(from,size)和query是同级关系,所以在准备搜索对象时直接设置
SearchResponse searchResponse = client.prepareSearch("store")
.setQuery(boolQueryBuilder)
.addSort("price", SortOrder.DESC)
.setFrom(0)
.setSize(2)
.get();
SearchHit[] hits = searchResponse.getHits().getHits();
System.out.println("总条数:"+hits.length);
//遍历结果集,取出field字段数据
for (SearchHit searchHit : hits) {
System.out.println(searchHit.getSource().get("price"));
}
}