倒排索引 数字和日期类型的问题
匿名 | 发布于2017年12月17日 | 阅读数:5965
网上大多数讲倒排索引都会拿一个文档和里面的内容做例子,其实就是一个field 里面的字符串内容分词后构建倒排索引以后简单的一个模型。但是如果field不再是文章字符串,而是数字,日期,这种情况下倒排索引又是如何构建的呢?难道从0到Integer.MAX_VALUE 每个数字构建一个和文档的关系吗?
日期如果也这么做就更可怕了,精确到毫秒下这种倒排列会更多,做范围查询效率会更低。倒排索引s又是如何处理数字日期这种数据呢
日期如果也这么做就更可怕了,精确到毫秒下这种倒排列会更多,做范围查询效率会更低。倒排索引s又是如何处理数字日期这种数据呢
3 个回复
kennywu76 - Wood
赞同来自: ybtsdst 、code4j 、strglee 、laoyang360
50x75=[doc40,doc41,doc53,doc78,doc99,...]", 表示50-75这个范围的数值包含在后面哪些文档列表里。由此“
50 OR 51 OR 52 ... OR 100”这样的范围查找,被优化成类似“50x75 OR 76x99 OR 100"这样的形式。 对于该算法的详细解释参考: https://blog.parse.ly/post/1691/lucene/
从ES5.0版本(Lucene 6.0)开始,对于数值型字段,改用了k-d tree这种数据结构编码。 改用这种数据结构以后,数值型数据的索引以及范围查找效率比之前用倒排编码的方式提高很多。参考: https://www.elastic.co/blog/lucene-points-6.0
zhangg7723
赞同来自:
codepub
赞同来自: