ES是什么?
独立的网络上的一个或一组进程的节点,可以当成是一个中间件,也可以当成是一个独立的服务,并支持分布式,可以以组为单位管理进程的节点。对外提供搜索服务(http或transport协议)。对内就是一个搜索数据库,他拥有传统关系型数据库对称的能力,包括存储索引的结构,存储对应文档内容等。
搜索的本质
关于搜索的本质,简单画了一个图
在传统关系型数据库中,如果想做搜索,关键字为"i am a chinese",sql语句会直接like '%i am a chinese%',这样其实并不是真正意义上的模糊搜索,四个单词可以作为四个关键词,而想做到这样,对于传统数据库是很麻烦的,所以这就引入了Elasticsearch,在ES中,会把关键词用分词器分成4个,作为索引存起来,在mysql中读取数据后,也把内容分词后存储起来,搜索的时候会进行匹配。
名词定义:
索引:搜索中的数据库或表定义,也是构建文档的时候的索引创建。
分词:搜索是以词为单位做最基本的搜索单元。依靠分词器构建分词。用分词构建倒排索引。
倒排索引:说倒排索引之前,先说一下正向索引,关于正向索引,就是通过行数据来匹配关键词,所以在正向索引中做搜索,需要遍历每一行,然后匹配关键词。对于倒排索引正好相反,先匹配关键词索引,然后通过索引来想上匹配数据,这样比正向索引效率更高。
TF-IDF打分:
TF:词频率,表示这个document文档包含了多少个这个词,包含越多表明越相关。
DF:文档频率,包含该词的文档总数目。
IDF:DF取反
也就是说一个词在一个文档中出现频率很高,那么TF也会很高,但如果这个词在所有文档中出现