那个网站教我做美食最好,万网官网登录入口,天津微信网站,鞍山创网站怎么创1.Elasticsearch概述 Elasticsearch 是一个分布式的全文检索引擎。采用Java语言开发#xff0c;基于Apache协议的开源项目#xff0c;具有实时搜索#xff0c;稳定#xff0c;可靠#xff0c;快速的特点。
1.1 全文检索引擎 分为通用搜索引擎#xff08;百度、谷歌…1.Elasticsearch概述 Elasticsearch 是一个分布式的全文检索引擎。采用Java语言开发基于Apache协议的开源项目具有实时搜索稳定可靠快速的特点。
1.1 全文检索引擎 分为通用搜索引擎百度、谷歌与站内搜索引擎全文检索在处理非结构化文本数据方面非常有用
1.2 结构化数据与非结构化数据 每个属性都有对应的字段的数据就是结构化数据反之无法用二维表表述的数据就是非结构化数据
1.3 ES全文检索的原理 Elasticsearch基于Lucene库构建而成它使用了倒排索引的方式来实现全文检索。
1.3.1 倒排索引 就是查找内容根据内容得到内容所在文档
1.3.2 正排索引 就是通过路径找到文档再从文档找某段内容
2. ES安装
Elasticsearch官方分布式搜索和分析引擎 | Elastic在 RESTful 风格的分布式免费开源搜索和分析引擎开源中Elasticsearch 处于领先地位速度快可实现水平可扩展性和可靠性并能让您轻松进行管理。免费启用。https://www.elastic.co/cn/elasticsearch/
2.1 启动ES 双击 bin/elasticsearch.bat TIPS 启动后ES会占用两个端口。 9200:ES对外提供服务的端口 9300:ES进行集群间通信与数据传输的端口 2.2 修改ES的配置文件 elasticsearch-8.8.2\config\elasticsearch.yml 2.3 添加编码配置 elasticsearch-8.8.2\config\jvm.options 2.4 打开浏览器访问 http://localhost:9200 3.ES的使用
常见操作新增索引PUT http://localhost:9200/job查询索引中数据GET http://localhost:9200/job删除索引DELETE http://localhost:9200/job查询所有索引数据GET localhost:9200/_all查询索引的摘要信息GET http://localhost:9200/_cat/indices?v获取所有映射GET http://localhost:9200/_mapping
3.1 启用/关闭索引 POST http://localhost:9200/job/_close POST http://localhost:9200/job/_open 3.2 ES的数据类型
类型说明示例text当一个字段是要被全文搜索的比如文章内容、产品描 述等使用text类型。 设置text类型以后字段内容会被分析在生成倒排索 引以前字符串会被分一个一个词项。比如java软件工程师 会被分词为 java 、 软 件 、 工程师keywordkeyword类型适用于索引结构化的字段如果字段需要 进行过滤、排序、聚合。keyword类型的字段只能通过 精确值搜索到。比如城市我们搜索北 京、深圳这类词不应该 被拆分。date通过format设置日期格式常见的可以设置成年月日时分秒、年月日及毫秒值三种格式。 ignore_malformed。默认值false。如果为true则忽略格式错误的数字。如果为false默认值则格式错误的数字将引发异常并拒绝整个文档。 null_value。默认是null。接受采用配置格式之一的日期值作为该字段以替换任何显式的空值。默认为null这意味着该字段被视为丢失。byteshortintegerlong整型比如职位ID、薪水。float, half_float, scaled_floatdouble浮点型integer_range long_range float_rangedouble_rangedate_range范围型
4.SpringBoot整合ES Spring Data是一个用于简化数据库访问并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷。包括非关系数据库、Map-Reduce 框架、云数据服务、关系数据库的访问支持等。 Spring Data ElasticSearch 基于 Spring Data API 简化 ElasticSearch操作将原始操作ElasticSearch的客户端API 进行封装 。与ElastichSearch交互简化数据访问层开发。
4.1 导入依赖 注意使用的JDK版本应与ES版本的兼容问题
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-elasticsearch/artifactId
/dependency
4.2 配置Elasticsearch连接信息
spring:elasticsearch:uris: http://localhost:9200
4.3 配置实体类
Data
Document(indexName esgoods) //indexName索引的名称必填项
public class Goods {Id //主键的唯一标识private Integer id;//index是否设置分词。searchAnalyze搜索时使用的分词器。type: 数据类型Field(index true,type FieldType.Text,searchAnalyzer ik_smart)private String name;private Integer stock; // 库存Field(type FieldType.Text,searchAnalyzer ik_smart)private String description; // 描述
}
注解作用Document(indexName esgoods)用于指定该Java类映射到Elasticsearch中的索引名称。在这里该类映射到名为esgoods的索引。Id用于标记文档的主键字段。在这里id字段将被用作文档的主键。Field(index true, type FieldType.Text, searchAnalyzer ik_smart)用于配置类中的字段。在这里name字段将被映射为Elasticsearch文档的一个字段并且允许进行分词索引使用的分词器是ik_smart。
4.4 编写Repository 继承ElasticsearchRepository接口可以获得常用的数据操作方法
Repository
public interface EsGoodsRepository extends ElasticsearchRepositoryGoods,Integer {PageGoods findByNameOrDescriptionOrderByIdDesc(String name, String description, Pageable pageable);
} ElasticsearchRepository接口是Spring Data Elasticsearch库提供的接口之一它继承自Spring Data的CrudRepository接口因此具备了常见的CRUD操作方法如保存、查询、更新和删除等。
Spring Data Elasticsearch - Reference Documentationhttps://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.repositories
4.5 实现方法
4.5.1 将数据库中数据导入ES
Overridepublic int importAll() {ListGoods goods goodsMapper.selectAll();IterableGoods iterable goodsRepository.saveAll(goods);IteratorGoods iterator iterable.iterator();int count 0;while (iterator.hasNext()) {iterator.next();count;}return count;}
4.5.2 实现搜索方法
Overridepublic PageGoods search(String keyword, Integer pageNum, Integer pageSize) {return goodsRepository.findByNameOrDescriptionOrderByIdDesc(keyword,keyword,PageRequest.of(pageNum,pageSize));}