springboot集成elasticsearch

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

  1. 全文检索的实现主要包括构建索引、高级搜索、聚集统计、数据建模四个模块;
  2. 使用 elasticsearch-rest-high-level-client 来操作elasticsearch , 构建索引时 , 根据实际情况考虑哪些字段需要分词 , 哪些不需要分词 , 这会影响搜索结果 。使用IK分词器虽然能解决一些中文分词的问题 , 但是由于分词的粒度不够细 , 导致很多词语可能搜不到 。例如ik分词器在构建索引“三国无双”时 , 会把“三国”“无双”存起来建索引 , 但是搜索“国无”时 , 搜不出来 , 因此 , 我们采用把文本拆分到最细粒度来进行分词 , 从而最大限度地搜索到相关结果 。详情参考:如何手动控制分词粒度提高搜索的准确性
  3. 高级搜索实现了以下几种:多字段搜索,指定多个字段进行搜索:query_string , 支持高亮显示经纬度搜索:distanceQuery范围过滤,对搜索结果进一步按照范围进行条件过滤:rangeQuery
  4. 搜索结果的展示提供了普通分页和滚动分页两种实现 。普通分页只适合数据量较小的场景 , 在数据量非常大的情况下 , start+size普通分页会把全部记录加载到内存中 , 这样做不但运行速度特别慢 , 而且容易让es出现内存不足而挂掉 。滚动分页需要得到一个scrollid , 以后每次使用scrollid去获取下一页的内容 , 缺点是不能跳页 。
  5. 聚集统计包含词条聚集、日期直方图聚集、范围聚集 , 并使用chart.js进行可视化
  6. 数据建模部分实现了嵌套对象的使用 , 查询时无需join性能较好 , 但是在建索引时就要把关联数据join好嵌套进去 。
  7. swagger入口:http://localhost:8080/swagger-ui.html
  8. 新增数据库数据导入es的工具 , 编程实现比logstash灵活 。使用请切换分支到master 。db-import-elastic_search
  9. 通用的多条件查询结构模板是布尔查询 , 其中must部分放入带分词的搜索例如match、querystring等;filter部分放入过滤条件例如term、range等查询 。因为filter部分利用缓存、跳过相关度打分提高性能:
// 通用查询结构模板{"query": {"bool": {"must": [{ "match": { "title":"Search"}},{ "match": { "content": "Elasticsearch" }}],"filter": [{ "term":{ "status": "published" }},{ "range": { "publish_date": { "gte": "2015-01-01" }}}]}}} 
springboot集成elasticsearch

文章插图
构建索引

springboot集成elasticsearch

文章插图
搜狗日志列表

springboot集成elasticsearch

文章插图
经纬度搜索

springboot集成elasticsearch

文章插图
数据统计分析

springboot集成elasticsearch

文章插图
各国家城市列表

springboot集成elasticsearch

文章插图
has parent搜索

springboot集成elasticsearch

文章插图
has child搜索
源代码地址:Spring-elastic_search: Spring boot整合Elasticsearch实现全文检索和大数据分析

【springboot集成elasticsearch】


    推荐阅读