您的位置:首页 > 其它

ElasticSearch数据导入和搜索的流程简析

2017-07-24 13:51 239 查看

数据导入流程

1,原始数据

以Mysql为例,就是一个数据表,表结构如下:

CREATE TABLE `twitter_tweet` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tweet_id` varchar(200) DEFAULT NULL,
`user_id` varchar(200) CHARACTER SET utf8 DEFAULT NULL,
`user_screen_name` varchar(200) CHARACTER SET utf8 DEFAULT NULL,
`tweet` longtext CHARACTER SET utf8,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;


2,创建映射

ES支持多种数据类型,例如text, keyword, date, long, double, boolean, ip,在创建mapping的时候需要指定每一个field的类型以及对应的分析器。

其中,有一些数据类型不支持分析器,例如keyword, date, long, double等,text(V5版本以上,V2等低版本是string)支持分析器。

"mappings": {
"user": {
"properties": {
"friends_count": {
"type": "integer"
},
"user_created_at": {
"format": "yyyy-MM-dd HH:mm:ss||strict_date_optional_time||epoch_millis",
"type": "date"
},
"user_name": {
"analyzer": "st_chinese",
"type": "text"
},
"user_screen_name": {
"analyzer": "st_chinese",
"type": "text"
},
"favourites_count": {
"type": "integer"
},
"description": {
"analyzer": "st_chinese",
"type": "text"
},
"type": {
"type": "keyword"
},
"is_protected": {
"type": "short"
}
}
}
}


3,分析器

在创建mapping的同时,需要声明分析器,例如中文简繁体、英语时态切词等。

如下图,有两个样例,不同分析器对原始的切词效果不一样,也直接影响存储的大小,影响查询的效率。





4,倒排索引

一个倒排索引由文档中,所有不重复词的词条构成,对于其中每个词,有一个包含它的文档列表,如下图所示。

根据分析器得到的结果,生成倒排索引,倒排索引的存储格式如下图所示。



数据搜索流程

1,分析器

通过搜索词语所在字段指定的分析器,对搜索词语进行切词。

2,倒排索引

通过倒排索引,匹配相关性,按照相关性返回对应的document列表,完成搜索。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  elasticsearch 搜索