Elasticsearch简介与实践

10-16 3,014 views

Elasticsearch(https://www.elastic.co/products/elasticsearch/)是一个基于Lucene的开源搜索引擎,使用Elasticsearch可以搭建分布式、可扩展、高可用的搜索集群,并提供RESTful API。Elasticsearch包含的数据结构及其与关系数据库的类比如下所示:

Elasticsearch 关系数据库
index database
mapping table
document row
field field

工作中,我们使用Elasticsearch搭建搜索集群,对文章构建索引并提供文章搜索接口。

部署集群

使用了Elasticsearch中文发行版elasticsearch-rtf(https://github.com/medcl/elasticsearch-rtf),该版本针对中文集成了相关插件。从Github上下载压缩包(https://github.com/medcl/elasticsearch-rtf/archive/1.0.0.tar.gz)并解压。

集群配置

修改config/elasticsearch.yml,设置集群名称:

设置节点名称:

对于同一集群中的各个节点,要保证各节点的集群名称相同,节点名称不同,这样在启动集群中的各节点时,能通过广播发现同一网段中具有相同集群名称的其他节点组成集群。

Analyzer配置

搜索引擎构建索引时需要先对文档进行分析,从文档中提取出token(词元),实现此操作的是tokenizer,提取出的token会被进一步处理(如转成小写等),实现此操作的是filter, 被处理后的结果被称为term(词),搜索引擎使用这些term构建倒排索引。tokenizer+filter被称为analyzer(分析器)。Elasticsearch内置了很多analyzer, 还有很多第三方的analyzer插件, 比如用于中文分词的analyzer。在elasticsearch.yml中可以配置所支持的tokenizer、filter和analyzer。
elasticsearch-rtf已集成了很多第三方的analyzer插件,并在elasticsearch.yml中已配置,其中“string2int ”用于将字符串转化为整数,从而减小索引文件大小,节约内存,这个插件使用Redis存储字符串和整数的映射关系,所以如果需要使用这个插件,需要搭建Redis并配置Redis访问地址,如果不使用这个插件,可以直接删除该插件配置。“ansj”是基于ansj的中文分词插件,这个插件可选择使用Redis的pub/sub方式更新词典,如果不使用这个插件,也可以直接删除该插件配置。
实际使用中,针对analyzer,我们默认使用“keyword”,即不分词,内容整体作为一个Token,并配置了“ik”,用于对标题和正文进行中文分词,配置如下:

JVM配置

修改bin/service/elasticsearch.conf,设置堆大小:

运行

执行以下命令启动各节点,各节点通过广播发现同一网段中具有相同集群名称的其他节点自动组成集群。

基于RESTful API创建索引

创建index:

创建mapping,设置文章各字段,其中主键是“_id”,“title”和“content”使用“ik”进行中文分词:

索引创建成功后,通过浏览器可查看到相关信息:
1
其中,有5个shard(分片),每个shard有一个副本。

基于Java API更新索引和搜索文章

添加依赖

建立连接

创建ElasticsearchClientManager类,用于维护Client实例,建立并保持和搜索集群的连接。

更新索引

搜索文章

标签:

基于WebSocket实现微信小程序的消息推送

微信小程序支持通过基于WebSocket进行消息推送,提供了相应的API,例如创建连接示例代码: JavaScript wx.connectSocket({ ...

阅读全文

基于nginx-sticky-module-ng实现会话保持(Sticky Sessions)

对服务进行集群部署,前端进行负载均衡时,需要实现会话保持,对于同一会话的多个请求,通过集群中的一个节点来提供服务。系统的部署结构如图所示,通过Resin...

阅读全文

ActiveMQ基于Zookeeper和LevelDB实现Master/Slave

ActiveMQ的Master/Slave目前支持三种实现方式: 1)Shared File System Master Slave; 2)JDBC Master Slave; 3)Replicated LevelDB Store。 对于第三种方...

阅读全文