所以我对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代表的范围12345600来12345699,和所有包含在该范围内的令牌的文件相匹配.
请注意列表中的每个标记如何连续更多的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将修剪两个十六进制数字.