1 Star 0 Fork 313

xiezhisheng / Spring-elastic_search

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Spring-elastic_search

介绍

Spring boot整合elastic search 6.8.1实现全文检索。主要包含以下特性:

  1. 全文检索的实现主要包括构建索引、高级搜索、文本分词三个模块;

  2. 索引的构建有增量更新和全量更新,一般第一次全量更新,以后增量更新;

  3. 使用 spring-boot-starter-data-elasticsearch 来操作elasticsearch,构建索引时,根据实际情况考虑哪些字段需要分词,哪些不需要分词,这会影响搜索结果。当构建索引和搜索时,都需要经过“分析”,而分词是分析的一个环节。 输入图片说明

  4. 高级搜索实现了以下几种:

    • 普通查询,先分词再精准搜索:matchQuery
    • 精准查询,不分词直接搜索:termQuery
    • 模糊查询,搜索字符串接近的词:fuzzyQuery
    • 布尔查询,使用布尔运算组合多个查询条件:boolQuery
    • 范围查询:rangeQuery
    • 前缀查询:prefixQuery
    • 通配符查询:wildcardQuery
    • 多字段搜索,指定多个字符串字段进行搜索,非字符类型搜不到:multi_match 。可指定不同的搜索策略:多字段搜索的best fields策略,是指某个字段匹配的关键字最多得分最高,而不是匹配的字段数目最多得分最高。most fields策略则相反,是指匹配查询最多的优先而不是某个查询的相关性。cross_fields策略,允许搜索关键词跨越多个字段出现,通常需要指定operator为and才能搜的比较准确,因为这要求每个关键词都要能匹配到才能出现在搜索结果中。dis_max语法,就是忽略掉多字段搜索中匹配的字段数目,只取匹配分数最大的那一个字段的搜索作为最后得分,用来实现best fields策略。
    • 全字段搜索,es自带的全字段搜索:query_string 。
    • 经纬度搜索:distanceQuery
    • 日期分面搜索,使用聚集实现,统计每个区间文档的数目:dateHistogramAggregation
  5. 文本分词使用了IK分词器:https://github.com/medcl/elasticsearch-analysis-ik

  6. 原始数据提交到倒排索引中以前,es可以对原始数据进行一系列的转换操作,这个过程叫做分析。一个完整的分析过程,要经过大于等于0个字符过滤器,一个分词器,大于等于0个分词过滤器组成。在搜索的时候,根据搜索方法的不同也可以选择是否进行经过分析过程。通常match搜索要经过分析,term搜索则不用。

  7. swagger入口:http://localhost:8080/swagger-ui.html

文档间的关系

  • 使用对象存储文档间的关系,仅适用于一对一的场景。因为存储一对多的时候,搜索会出现跨对象的匹配,影响结果的准确性。
  • 嵌套类型可以存储一对多的文档关系,但是把所有子表的数据塞到父表中,会降低系统的性能。子文档的更新需要重建整个索引。
  • 定义父子关系用于处理一对多的文档关系,在子文档中添加一个_parent字段指向父文档,相当于一个外键。父子文档会被路由到 同一个分片,查询时需要将文档进行连接,效率低于嵌套,但是修改文档时索引不用重建。
  • 反规范化通过复制数据来避免表连接,但是需要更多空间。反规范化是唯一能用于解决多对多的表关系,可以将多对多转化为多个 一对多。由于数据被复制,导致聚集和查询计算结果拥有重复数据导致结果不准确。

集群搭建

我们在centos7搭建一个三台机器的elastic search集群,ip分别为172.16.3.151,172.16.3.152,172.16.3.153.

  1. 关闭防火墙和selinux
  2. 下载rpm包,运行rpm -ivh elasticsearch-6.8.1
  3. 修改每个节点的elasticsearch.yml,在/etc/elasticsearch目录下
cluster.name: wsz
# 节点名,根据节点的不同给与不同名字
node.name: hadoop1
# 根据节点的实际ip填写
network.host: 172.16.3.151
# 节点的ip列表
discovery.zen.ping.unicast.hosts: ["172.16.3.151", "172.16.3.152", "172.16.3.153"]
# 控制集群在达到多少个节点之后才会开始复制分片,一般为集群节点数目
gateway.recover_after_nodes: 3
  1. 每个节点运行systemctl start elasticsearch.service
  2. 查看集群状态,访问http://172.16.3.151:9200/_cluster/state ,显示有三个节点,搭建成功。 输入图片说明

效果图

输入图片说明 输入图片说明

空文件

简介

Spring boot整合Elastic search实现全文检索 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/xiezhisheng/Spring-elastic_search.git
git@gitee.com:xiezhisheng/Spring-elastic_search.git
xiezhisheng
Spring-elastic_search
Spring-elastic_search
master

搜索帮助