阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

ElasticSearch[v6.2] 在实际项目中的应用

437次阅读
没有评论

共计 5577 个字符,预计需要花费 14 分钟才能阅读完成。

 摘要:本文所讲述的内容,为 ElasticSearch(以下简称 ES)全文搜索引擎在实际大数据项目的应用;ES 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。ES 是 Lucene 的封装,Java 开发,提供了 REST API 的操作接口,开箱即用,是目前全文搜索的首选;

本文的使用项目为基于 Spring Boot 的快速开发环境搭建的项目框架,使用 Spring Cloud 作为服务治理的框架;集成 ES 的过程中,考虑过使用 Spring Data 的方式集成,进行数据的对接,后面通过多方面的调研和学习讨论,最终确定了 bboss 的集成方案,一个 高性能 elasticsearch ORM 开发库使用介绍,在这里特别感谢 bboss 的作者大河和他的团队提供的帮助;

一、ES 基础

网上关于 ES 的介绍已经特别多,这里将不再进行详细介绍,只是针对几个重点进行说明;

1、Index(索引)– 可以理解为关系型数据库中的 数据库的概念

一个索引就是含有某些相似特性的文档的集合。例如,你可以有一个用户数据的索引,一个产品目录的索引,还有其他的有规则数据的索引。一个索引被一个名称 (必须都是小写) 唯一标识,并且这个名称被用于索引通过文档去执行索引,搜索,更新和删除操作。

2、Type(类型)– 可以理解为关系型数据库中的 表的概念(6.2 版本中一个 index 下只有一个 Type)

3、Document(文档)– 可以理解为关系型数据库中表的 ROW

一个文档是一个可被索引的数据的基础单元。例如,你可以给一个单独的用户创建一个文档,给单个产品创建一个文档,以及其他的单独的规则。这个文档用 JSON 格式表现,JSON 是一种普遍的网络数据交换格式。

4、Field(字段)– 相当于表中的 COLUMN

5、在一个关系型数据库里面,schema 定义了表、每个表的字段,还有表和字段之间的关系。与之对应的,在 ES 中:Mapping 定义索引下的 Type 的字段处理规则,即索引如何建立、索引类型、是否保存原始索引 JSON 文档、是否压缩原始 JSON 文档、是否需要分词处理、如何进行分词处理等。

  6、ELK 是什么?

ELK=elasticsearch+Logstash+kibana
elasticsearch:后台分布式存储以及全文检索
logstash: 日志加工、“搬运工”
kibana:数据可视化展示。特别是在 DSL 的学习过程中,相当于数据库的可视化工具,实时交互操作。
ELK 架构为数据分布式存储、可视化查询和日志解析创建了一个功能强大的管理链。三者相互配合,取长补短,共同完成分布式大数据处理工作。

二、ES 能解决什么样的问题?

实际项目开发实战中,几乎每个系统都会有一个搜索的功能,当搜索做到一定程度时,维护和扩展起来难度就会慢慢变大,所以很多公司都会把搜索单独独立出一个模块,用 ElasticSearch 等来实现。近年 ElasticSearch 发展迅猛,已经超越了其最初的纯搜索引擎的角色,现在已经增加了数据聚合分析(aggregation)和可视化的特性,如果你有数百万的文档需要通过关键词进行定位时,ElasticSearch 肯定是最佳选择。当然,如果你的文档是 JSON 的,你也可以把 ElasticSearch 当作一种“NoSQL 数据库”,应用 ElasticSearch 数据聚合分析(aggregation)的特性,针对数据进行多维度的分析。

而在本文的项目中,舆情监测部分,搜索功能将是该模块的核心功能;包括条件检索,中文分词,全文搜索等功能,而 BBOSS 对于该部分功能的实现,提供了极大的便利;

三、ES 环境搭建和在项目中的应用

1、ES 集群搭建,关于 ES 集群的搭建,这里不再单独介绍,推荐的博客特别多。但有一点要注意,就是不同版本的 ES 对于功能的支持会有一些区别,要注意;

2、ES 的查询语法;项目集成 BBOSS 后,比较类似 Mybatis 框架,直接完成 DSL 语句的编写放入 XML,通过对应的 DAO 方法调用即可,所以 ES 的查询语法是 ES 学习的重点,也是 ES 进阶的重点,不同的需求对于 DSL 的查询复杂度不一,可以通过 ES 的中文官方网站进行阅读学习,并在自身搭建的 ES 集群提供的 kibana 中进行操作,ES 权威中文指南

3、项目集成 bboss

第一步、maven 引入包

<dependency>
    <groupId>com.bbossgroups.plugins</groupId>
    <artifactId>bboss-elasticsearch-rest</artifactId>
    <version>5.0.6.3</version>
</dependency>

第二步、bboss elasticsearch 配置

运行 bboss es 需要三个配置文件,放到资源目录(resources)的 conf 目录下即可:

conf/elasticsearch.xml        es 客户端配置文件

conf/httpclient.xml            es http 连接池配置文件

conf/elasticsearch.properties  es 参数配置文件,在上面的两个 xml 文件中引用,所以我们只需要修改 elasticsearch.properties 即可。
第三步、配置 ES 查询 DSL

在 resources 下创建配置文件 estrace/xxx.xml,配置一个 query dsl 脚本,名称为 queryServiceByCondition,我们将在后面的 ClientInterface 组件中通过 queryServiceByCondition 引用这个脚本,定义脚本内容;

加载 query dsl 文件, 并执行查询操作

@Override
public String searchInfo(JSONObject jsonObject) {
        Map<String, Object> params = formatParams(jsonObject);
        JSONObject result = new JSONObject();
        // 创建加载配置文件的客户端工具,用来检索文档,单实例多线程安全
        ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil(“esmapper/opinion.xml”);
        ESDatas<OpinionInfo> esDatas = clientUtil.searchList(“act_yq_info_summary/_search”,//act_yq_info_summary 为索引名称,search 为操作的 action
                “searchOpinionInfo”,//esmapper/opinion.xml 中定义的 dsl 语句
                params, OpinionInfo.class);
        result.put(“esDatas”, esDatas);
        return JSONObject.toJSONString(result);
    }

关于 BBOSS 语法的具体学习,可以移步到  高性能 elasticsearch ORM 开发库使用介绍,或者入 QQ 群 166471282

4、提供一个 mapping 设置和 dsl 的示例,仅供参考;

PUT /act_yq_info_summary/
{
  “settings”:{
      “number_of_shards”:6,
      “index.refresh_interval”: “5s”,
      “analysis” : {
          “analyzer” : {
                “ik” : {
                    “tokenizer” : “ik_max_word”
                }
            }
        }
  },
  “mappings”:{
      “articles”:{
        “dynamic_date_formats”:[
            “yyyy-MM-dd HH:mm:ss”,
            “yyyyMMdd”,
            “yyyy-MM-dd”
        ],
        “dynamic”:”false”,
        “properties”:{
            “infoUid”:{
              “type”:”text”
            },
            “compareId”:{
              “type”:”text”
            },
            “plats”:{
              “type”:”keyword”
            },
            “keyWords”:{
              “type”:”keyword”
            },
            “infoTitle”:{
              “type”:”text”,
              “store”:true,
              “analyzer” : “ik_max_word”
            },
            “infoDetail”:{
              “type”:”text”,
              “store”:true,
              “analyzer” : “ik_max_word”
            },
            “infoUrl”:{
              “type”:”text”
            },
            “pubTime”:{
              “type”:”date”,
              “format”:”yyyy-MM-dd HH:mm:ss”
            },
            “platsType”:{
              “type”:”keyword”
            },
            “mlEmotion”:{
              “type”:”keyword”
            },
            “userEmotion”:{
              “type”:”keyword”
            }
        }
      }
  }
}

查询的 DSL

GET act_yq_info_summary/_search
{
    “query”: {
        “bool”: {
            “must”: [{
                    “bool”: {
                        “should”: [{
                                “match”: {
                                    “infoDetail”: “ 乔军 ”
                                }
                            },
                            {
                                “match”: {
                                    “infoTitle”: “ 乔军 ”
                                }
                            }
                        ]
                    }
                },
                {
                    “terms”: {
                        “userEmotion”: [“pos”, “neg”, “neu”]
                    }
                }
            ],
            “filter”: {
                “bool”: {
                    “must”: [{
                            “terms”: {
                                “plats”: [“jingdong”, “toutiao_news”, “toutiao_ans”, “sina_blog”, “sina_com”, “bd_news”, “bd_konws”, “bd_tieba”, “zhihu_ques”, “zhihu_ans”]
                            }
                        },
                        {
                            “range”: {
                                “pubTime”: {
                                    “gte”: “2016-05-01 00:00:00”,
                                    “lte”: “2018-05-07 23:59:59”
                                }
                            }
                        },
                        {
                            “terms”: {
                                “keyWords”: [“ 蓝月亮湖南卫视中秋晚会 ”, “ 蓝月亮央视中秋晚会 ”, “ 蓝月亮旋风孝子 ”]
                            }
                        }
                    ]
                }
            }
        }
    },
    “highlight”: {
        “fields”: [{
                “infoTitle”: {}
            },
            {
                “infoDetail”: {}
            }
        ]
    },
    “from”: 0,
    “size”: 10,
    “sort”: [{
            “_score”: {
                “order”: “desc”
            }
        },
        {
            “pubTime”: {
                “order”: “desc”
            }
        }
    ]
}

5、关于分词器,这里还是推荐 IK 分词吧,IK 分词可以设置 ik_smart  或者  ik_max_word,这里不做详解,推荐使用 ik_max_word

写在最后的话,ES 是一个非常强大的搜索引擎,要入门不是很难,但是要精通查询,查询优化,最大程度的搜索最想要的结果是有很多优化的余地的,包括评分机制,包括新版本提供的聚合功能等,只能说,加油学习吧

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5577字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7992771
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛 NAS 玩转 Frpc 并且配置,随时随地直连你的私有云 大家好,我是星哥,最近在玩飞牛 NAS。 在数...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...