數(shù)據(jù)導(dǎo)入流程
1,原始數(shù)據(jù)
以Mysql為例,就是一個(gè)數(shù)據(jù)表,表結(jié)構(gòu)如下:
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,創(chuàng)建映射
- ES支持多種數(shù)據(jù)類型,例如text, keyword, date, long, double, boolean, ip,在創(chuàng)建mapping的時(shí)候需要指定每一個(gè)field的類型以及對(duì)應(yīng)的分析器。
- 其中,有一些數(shù)據(jù)類型不支持分析器,例如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,分析器
- 在創(chuàng)建mapping的同時(shí),需要聲明分析器,例如中文簡(jiǎn)繁體、英語時(shí)態(tài)切詞等。
- 如下圖,有兩個(gè)樣例,不同分析器對(duì)原始的切詞效果不一樣,也直接影響存儲(chǔ)的大小,影響查詢的效率。

分析器1.png

分析器2.png
4,倒排索引
- 一個(gè)倒排索引由文檔中,所有不重復(fù)詞的詞條構(gòu)成,對(duì)于其中每個(gè)詞,有一個(gè)包含它的文檔列表,如下圖所示。
- 根據(jù)分析器得到的結(jié)果,生成倒排索引,倒排索引的存儲(chǔ)格式如下圖所示。

倒排索引.png
數(shù)據(jù)搜索流程
1,分析器
- 通過搜索詞語所在字段指定的分析器,對(duì)搜索詞語進(jìn)行切詞。
2,倒排索引
- 通過倒排索引,匹配相關(guān)性,按照相關(guān)性返回對(duì)應(yīng)的document列表,完成搜索。