• es(网站的搜索技术)


    一,核心概念

     Elasticsearch 是一个分布式的基于 REST 接口的为云而设计的搜索引擎

     

    三,全文搜索实现过程:倒排索引

    我们都知道索引存在的意义就是为了加速数据的查询

    在关系型数据库中如果没有索引的话,为了查找数据我们需要每条数据去进行比对,运气不好的话可能需要扫描全表才能查找到想要的数据。以Mysql为例,它使用了B+树作为索引来加速数据的查询。假设有这样的一种场景,周末在路上逛的时候突然听到一首非常好听的歌曲,你记住了其中两句歌词,想着赶快拿手机到QQ音乐中查一下是什么歌。如果你是QQ音乐的程序猿,你该怎么实现根据歌词查询歌曲的功能呢?
    用B+树作为索引行不行呢?全文索引就是需要支持对大文本进行索引的,从空间上来说 B+ 树不适合作为全文索引,同时 B+ 树因为每次搜索都是从根节点开始往下搜索,所以会遵循最左匹配原则,而我们使用全文搜索时,往往不会遵循最左匹配原则,所以可能会导致索引失效。这时候倒排索引就派上用场了。
    所谓正排索引就像书中的目录一样,根据页码查询内容,但是倒排索引确实相反的,它是通过对内容的分词,建立内容到文档ID的关联关系。这样在进行全文检索的时候,根据词典的内容便可以精确以及模糊查询,非常符合全文检索的要求。
     

    四,IK分词器

     

    二,应用场景  

    ElasticSearch是一款非常强大的、基于Lucene的开源搜索及分析引擎;它是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。

    • 网站搜索(网站公司的实时搜索,全文搜索);

    • 日志管理与分析、安全指标监控、应用性能监控、Web抓取舆情分析;

    • 1)新浪ES 如何分析处理32亿条实时日志 http://dockone.io/article/505
      2)阿里ES 构建挖财自己的日志采集和分析体系 http://afoo.me/columns/tec/logging-platform-spec.html
      3)有赞ES 业务日志处理 http://tech.youzan.com/you-zan-tong-ri-zhi-ping-tai-chu-tan/
      4)ES实现站内搜索 http://www.wtoutiao.com/p/13bkqiZ.html

    三,代码

    一。搜索技术    springboot集成es

    ElasticsearchRestTemplate

    mapping  继承  extends ElasticsearchRepository

    实体类写的映射关系:

    注解:@Document用来声明Java对象与ElasticSearch索引的关系
                 indexName 索引名称(是字母的话必须是小写字母)
                 type 索引类型
                 shards 主分区数量,默认5
                 replicas 副本分区数量,默认1
                 createIndex 索引不存在时,是否自动创建索引,默认true
                            不建议自动创建索引(自动创建的索引 是按着默认类型和默认分词器)
    注解:@Id 表示索引的主键
    注解:@Field 用来描述字段的ES数据类型,是否分词等配置,等于Mapping描述
                 index 设置字段是否索引,默认是true,如果是false则该字段不能被查询
                 store 标记原始字段值是否应该存储在 Elasticsearch 中,默认值为false,以便于快速检索。虽然store占用磁盘空间,但是减少了计算。
                 type 数据类型(text、keyword、date、object、geo等)
                 analyzer 对字段使用分词器,注意一般如果要使用分词器,字段的type一般是text。
                 format 定义日期时间格式
    注解:@CompletionField 定义关键词索引 要完成补全搜索
                 analyzer 对字段使用分词器,注意一般如果要使用分词器,字段的type一般是text。
                 searchAnalyzer 显示指定搜索时分词器,默认是和索引是同一个,保证分词的一致性。
                 maxInputLength:设置单个输入的长度,默认为50 UTF-16 代码点

     

    《SpringBoot篇》16.SpringBoot整合Elasticsearch_陈老老老板的博客-CSDN博客

    SpringBoot+ElasticSearch 实现模糊查询,批量CRUD,排序,分页,高亮

    ElasticSearch入门到springboot使用_seeyoutlb的博客-CSDN博客

    二。正则表达式

    常用的正则表达式大全_-BoBooY-的博客-CSDN博客

    00000

  • 相关阅读:
    这 10 种架构师,不合格!
    前端的简单介绍
    中国大数据与实体经济融合发展白皮书2019整理
    DSPE-PEG-PDP,DSPE-PEG-OPSS,磷脂-聚乙二醇-巯基吡啶供应,MW:5000
    C++ 多态
    技术分享 | 接口自动化测试如何处理 Header cookie
    计算机毕业设计SSM钓鱼爱好者交流平台【附源码数据库】
    android被杀以后fragments缓存重建问题和测试方法
    Pytorch模型转ONNX部署
    磁性聚苯乙烯纳米微球负载1-Me-AZADO/双硫腙接枝聚苯乙烯微球/氨基酸聚苯乙烯树脂微球的合成与表征
  • 原文地址:https://blog.csdn.net/weixin_64035205/article/details/128020871