搜索引擎技术排名:

1.Elasticsearch:开源的分布式搜索引擎

2. Splunk:商业项目

3. Solr: Apache的开源搜索引擎

认识和安装

Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发。官网地址:  https://lucene.apache.org/.

Lucene的优势:

  • 易扩展 
  • 高性能(基于倒排索引) 心

2004年Shay Banon基于Lucene开发了Compass

2010年Shay Banon重写了Compass,取名为Elasticsearch。

官网地址:  https://www.elastic.co/cn/

目前最新的版本是:8.x.x

elasticsearch具备下列优势:

  • 支持分布式,可水平扩展
  • 提供Restful接口,可被任何语言调用

elasticsearch结合kibana、Logstash、Beats,是一整套技术栈,被叫做ELK。被广泛应用在日志数据分析、实时监控等领域。

【Elasticsearch】-倒排索引,IK分词器以及索引库的操作_字段

docker安装命令

单机版本的elasticsearch:

docker run -d \
  --name es \
  -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
  -e "discovery.type=single-node" \
  -v es-data:/usr/share/elasticsearch/data \
  -v es-plugins:/usr/share/elasticsearch/plugins \
  --privileged \
  --network hm-net \
  -p 9200:9200 \
  -p 9300:9300 \
  elasticsearch:7.12.1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

通过下面的Docker命令,即可部署Kibana:

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=hm-net \
-p 5601:5601  \
kibana:7.12.1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

【Elasticsearch】-倒排索引,IK分词器以及索引库的操作_字段_02

倒排索引

elasticsearch采用倒排索引:

文档(document) :每条数据就是一个文档

词条(term) :文档按照语义分成的词语

【Elasticsearch】-倒排索引,IK分词器以及索引库的操作_字段_03

【Elasticsearch】-倒排索引,IK分词器以及索引库的操作_字段_04

正向索引

基于文档id创建索引。根据id查询快,但是查询词条时必须先找到文档,而后判断是否包含词条

倒排索引

对文档内容分词,对词条创建索引,并记录词条所在文档的id。

查询时先根据词条查询到文档id,而后根据文档id查询文档

IK分词器

(i坤之我不是小黑子)

中文分词往往需要根据语义分析,比较复杂,这就需要用到中文分词器,例如IK分词器。IK分词器是林良益在2006年开源发布的,其采用的正向迭代最细粒度切分算法一直沿用至今。

只需将下载好的分词器放入elasticsearch的插件入目即可

【Elasticsearch】-倒排索引,IK分词器以及索引库的操作_分词器_05

在Kibana的DevTools中可以使用下面的语法来测试Ik分词:

【Elasticsearch】-倒排索引,IK分词器以及索引库的操作_分词器_06

语法说明:

POST:请求方式

/_analyze:请求路径,这里省略了http://虚拟机地址,有kibana帮我们补充

请求参数,json风格:

  • analyzer:分词器类型,这里是默认的standard分词器
  • text:要分词的内容

现在用ik分词器测试:

ik分词有两种模式:

  • ik_smart:智能切分,粗粒度
  • ik_max_word:最细切分,细粒度Ik分词器

【Elasticsearch】-倒排索引,IK分词器以及索引库的操作_分词器_07

ik的另一种分词模式(分的更细)

【Elasticsearch】-倒排索引,IK分词器以及索引库的操作_分词器_08

IK分词器允许我们配置拓展词典来增加自定义的词库:

【Elasticsearch】-倒排索引,IK分词器以及索引库的操作_字段_09

【Elasticsearch】-倒排索引,IK分词器以及索引库的操作_字段_10

基础概念

elasticsearch中的文档数据会被序列化为json格式后存储在elasticsearch中。

【Elasticsearch】-倒排索引,IK分词器以及索引库的操作_字段_11

索引(index):相同类型的文档集合(索引库)

映射(mapping) ∶索引中文档的字段约束信息,类似表的结构约束

【Elasticsearch】-倒排索引,IK分词器以及索引库的操作_分词器_12

【Elasticsearch】-倒排索引,IK分词器以及索引库的操作_字段_13

索引库操作

Mapping映射属性

mapping是对索引库中文档的约束,常见的mapping属性包括:

type:字段数据类型,常见的简单类型有:

  • 字符串: text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)
  • 数值:long、integer、short、byte、double、float.
  • 布尔: boolean
  • 日期: date
  • 对象:object

index:是否创建索引,默认为true

analyzer:使用哪种分词器

properties:该字段的子字段

索引库操作

创建索引库和mapping的请求语法如下:

【Elasticsearch】-倒排索引,IK分词器以及索引库的操作_elasticsearch_14

查询和删除

# 查询
GET /heima

# 删除
DELETE /heima
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

索引库和mapping一旦创建无法修改,但是可以添加新的字段,语法如下:

【Elasticsearch】-倒排索引,IK分词器以及索引库的操作_elasticsearch_15

【Elasticsearch】-倒排索引,IK分词器以及索引库的操作_字段_16