Solr date field tdate vs date?

Osv*_*ado 33 solr date

所以我对Solr的字段日期类型有一个问题,这是非常直接的:'date'字段和'tdate'字段之间有什么区别?

模式.xml声称"对于更快的范围查询,请考虑tdate类型"和"基于特里的日期字段"以获得更快的日期范围查询和日期分面."足够公平......但是精确的步骤="6"是什么?我该改变吗?如果我使用tdate,它会改变我创建查询的方式吗?什么是真正的优势或Solr做了什么使它变得更好?

PS通过谷歌,Solr手册,solr wiki和java文档没有任何运气,所以我很欣赏一个善意和解释性答案:)...同时检查:http : //www.lucidimagination.com/blog/2009/05/13/exploration-lucene-and-solrs-trierange-capabilities/http://web.archiveorange.com/archive/v/AAfXfqRYyLnDFtskmLRi

hay*_*uhl 40

通过预先计算某些范围结果并将它们作为单个记录存储在索引中,Trie字段可以更快地进行范围查询.为清楚起见,我的示例将使用十进制的整数.同样的概念适用于所有特里类型.这包括日期,因为日期可以表示为自1970年以来的秒数.

假设我们将数字编入索引12345678.我们可以将其标记为以下标记.

12345678
123456xx
1234xxxx
12xxxxxx
Run Code Online (Sandbox Code Playgroud)

所述12345678令牌表示实际整数值.带有x数字的标记代表范围.123456xx代表的范围1234560012345699,和所有包含在该范围内的令牌的文件相匹配.

请注意列表中的每个标记如何连续更多的x数字.这由精确步骤控制.在我的例子中,你可以说我使用了2的精确步长,因为我修剪了2位数来创建每个额外的令牌.如果我使用3的精确步长,我会得到这些标记.

12345678
12345xxx
12xxxxxx
Run Code Online (Sandbox Code Playgroud)

精确步骤4:

12345678
1234xxxx
Run Code Online (Sandbox Code Playgroud)

精确步骤1:

12345678
1234567x
123456xx
12345xxx
1234xxxx
123xxxxx
12xxxxxx
1xxxxxxx
Run Code Online (Sandbox Code Playgroud)

很容易看出较小的精确步骤如何产生更多的标记并增加索引的大小.但是,它也加快了范围查询.

如果没有特里场,如果我想查询范围1250至1275年,Lucene的必须取25个条目(1250,1251,1252,... 1275),并结合搜索结果.随着特里场(与1精密步进),我们可以摆脱获取8项(125x,126x,1270,1271,1272,1273,1274,1275),因为125x是预先计算聚集1250- 1259.如果我使用大于1的精度步长,查询将返回到获取所有25个单独的条目.

注意:实际上,精确步骤是指为每个令牌修剪的位数.如果您要以十六进制编写数字,精确步长4将为每个标记修剪一个十六进制数字.精确步长为8将修剪两个十六进制数字.


Kar*_*ell 11

好问题 :-) !我在某处读了一个很好的答案,遗憾的是再也找不到了.

基本上,trie范围更快.是一个解释.使用precisionStep,您可以配置索引可以增长多少以获得性能优势.引用你所指的链接:

"更重要的是,它不依赖于索引大小,而是取决于所选择的精度."

"TrieRange的唯一缺点是索引大小稍微大一点,因为附加条款索引"