1.全文检索?
注意检索和搜索是有区别的,搜索是有明确的边界条件; 而 检索是没有的,比如 搜索"霸道“,可以出现汉语的霸道解释,还有丰田Parado。。。
倒排索引简化过程?
posting List : 倒排表
进行查询的过程:
从PostingList倒排表中,对标记匹配到的分词进行个数的统计,其统计个数也就是 对应分词的匹配数(相关度)。
2.ES支持哪些类型的查询?
4.2.2 过滤器- Filter
4.2.3 组合查询-Bool query
4.2.4地理位置搜索 : 矩形搜索:在矩形中查询某些点; 半径检索; 多边形检索
其中:嵌套查询: Object, Nested,join
suggester: 例如百度搜索框中的 智能提示框
3.term、 match、 keyword有何区别?
具体地:keyword也是 不分词的,keyword是针对源数据、
4.MySQL(B+Tree)为什么不适合做全文检索?
1.索引往往字段很长,如果使用B+Trees,树可能很深,IO很可怕;
2.性能无法保证并且索引会失效;当并发上来时,检索性能会显著下降;
3.精准度差(相关度低),并且无法和其它属性产生相关性。
5.ES的写入原理?
注意: 物理内存,磁盘, flush, merge:合并segment文件(倒排索引文件)
每隔一定时间,默认1s,从buffer中写入到 segment文件中,buffer有时间和最低内存48M
flush是发生在 OS Cache ---> OS Disk过程中的。
translog文件:ES是基于Lucene存储引擎进行数据存储的,而Lucene是基于java开发的,所以是运行在 jvm中的。
ES 每次调用 Lucene 的接口写入或删除数据后,都会将操作日志记录到 Translog 中防止意外断电或程序奔溃导致数据丢失。
Elasticsearch 之 Translog - 简书 (jianshu.com)
6.ES读写性能的调优?