专门做团购的网站有哪些,如何建设一个简易网站,濮阳做公司网站,cms开源高性能分布式搜索引擎。 数据库模糊搜索比较慢#xff0c;但用搜索引擎快多了。 下面是一些搜索引擎排名 Lucene是一个Java语言的搜索引擎类库#xff08;一个工具包#xff09;#xff0c;apache公司的顶级项目。 优势#xff1a;易扩展、高性能#xff08;基于倒排索引…高性能分布式搜索引擎。 数据库模糊搜索比较慢但用搜索引擎快多了。 下面是一些搜索引擎排名 Lucene是一个Java语言的搜索引擎类库一个工具包apache公司的顶级项目。 优势易扩展、高性能基于倒排索引 elasticsearch优势 支持分布式可水平扩展 提供Restful接口可被任何语言调用 elasticsearch随着技术发展越来越完善已经不是一个孤立的技术了有一套完整的技术栈简称ELKkibana、Logstash、Beats被广泛应用在日志数据分析、实时监控等领域。 安装ES
推荐Docker命令一键安装。
安装Kibana
一个图形界面的工具会帮助我们连接ES提供图形化的操作还能自动补全。
推荐Docker命令一键安装。
Kibana提供了一个工具Dev tool它可以帮助我们向ES发送HTTP请求而且自带提示
倒排索引
传统MySQL关系数据库只会给文档建立id索引。
而elasticsearch采用倒排索引不仅会给文档建立id索引还会给拆开的词条建立索引。
文档每条数据就是一个文档词条文档按照语义分成的词语 会给词条建一个索引将来根据词条来检索速度会非常快。 以下图为例其实我们搜了两次第一次拿词条来词条列表找第二次拿着找到的文档id到文档列表里找文档。而传统关系数据库只能全表扫描。 正向索引先去找文档看文档里是否包含词条。
倒排索引先去找词条得到文档id再去找文档。要经历两次检索
IK分词器
英文分词很简单因为单词间有空格。仲文分词必须按语义进行分析。 把这个插件ik放到插件目录里。 analyzer可以中文分词的ik_smart、ik_max_word
IK分词器允许词典扩展。 ES核心概念 叫索引可能会混淆我们通常把他理解成索引库。因为MySQL里给id加的那个也叫索引。索引和数据库里的表table的概念有点接近。要保证json文档他们的结构一致、数据类型一致叫做映射。
下图是ES和MySQL数据库一些概念的对比 Mapping映射属性 Mapping映射类似于建表 keyword不可拆分的词 索引库操作 keyword不可拆text可拆 在elasticsearch里不允许对索引库做修改操作指不能对已有的索引库字段做修改但允许添加新的字段。 文档操作
上节课学完索引库的各种操作相当于在MySQL里去创建表表有了之后我们要学着操作数据。在索引库里我们操作的是文档。
文档CRUD
完全符合Restful风格 全量修改改的话全部都要改。
增量/局部修改修改指定的。 批量处理
一个一个文档处理效率太低这次学习批量处理。 JavaRestClient
ES给我们提供的java客户端JavaRestClient。
这套客户端就是帮我们向restful接口发请求的。
客户端初始化
步骤引依赖-对SpringBoot原有默认的ES版本进行覆盖-初始化RestHighLevelClient 例 商品表Mapping映射
上节课已经完成es的java客户端的初始化之后的几节课我们将学习如何利用这个客户端实现索引库及文档的各种操作。
创建商品索引库首先要确定商品的Mapping映射。 索引库操作 文档操作
上节课学习es的java客户端操作索引库的各种API并创建了一个索引库。有了索引库我们就可以向里面写入文档进行文档操作了。 source 源 request.source请求参数里的数据直接用数据库里的。但是数据库里的和索引库的字段不完全一样我们要怎样保证他们一样呢 首先定义一个实体这个索引要和索引库的mapping映射结构一致。 直接复制一份po然后把其中不需要的属性删掉。简单无需技术含量 根据id查数据库查到数据库数据转化为文档数据用到糊涂工具包BeanUtil.copyProperties(item,ItemDoc.class)拷贝数据。 得到的文档数据放到source方法请求参数必须是JSON用工具类JSONUtil转换 新增文档操作如上接下来我们学习文档其他增删改查的API。 发送请求结果获取到的request对象里面是完整的Json数据 而解析结果就是获取到的request对象里的source 批处理
一次只能操作一个文档效率太低es提供了这种批处理的restful接口之前我们是用ADP请求的方式去调用的这回我们学习如何利用java客户端去做批处理。 一次全查可能会爆所以下面的例子采用分页查询。 使用Page 结果通过record取出做一个判断是否没查到任何数据一个健壮性判断。 没查到数据就不用往下走直接return查到了再往索引库里写。 参数id不是写死的而是要改成获取到的request遍历的item.idint型要改成String source里的要变成JSON而且要用我们改好的po实体类Itemdoc而不是item。 while用来翻页的。 DSL查询
前面已经学习了es索引库和文档的各种增删改查操作了其中我们查询文档都是根据id查询的但是这种查询方式并不能满足我们所有的业务场景的需求我们实际项目中不一定是根据id搜索的他的搜索条件往往比较复杂。这时我们就需要一种新的查询方式ES就给我们提供了一个DSL的查询来实现这种复杂条件的查询。 快速入门
因为是查询所以这里是GET。 GET /索引库名/_search match_all{}匹配/查询所有{}里面如果啥也没有就是没有查询条件那就查所有 es内部默认有限制单次允许查询最大数据不能超过1万 gte 大于等于 hits查询命中的数据 叶子查询 全文检索查询就是之前的倒排索引查询。 精确搜索输入的搜索条件都是相对简单不可分割的词。 rande范围term直接比较字段值。 下面以全文检索为例 符合查询
排序和分页
高亮显示