索引中文档的属性建立与不建立带来的影响总结
1.依据文档的某属性去查找索引的话,只会返回带有此属性(如果你对当前属性设定了条件,那么需要满足当前条件)的所有文档,没有建立此属性的文档是不会在返回结果文档中的,不管你的属性值类型是什么(string、date、long、int),结果都是一样的
2.查找条件满足,排序不会有任何影响(如果排序的属性文档没有,lucene会按文档建立的先后顺序返回且只会按照这个顺序),只需注意说的第一点
3.索引查找也不会有任何影响,只需注意说的第一点
4.数量查找条件如果满足,绝对正确,但如果是说的第一点的话,那就有问题了
5.如果做数据统一整合的话,建议没有属性的填默认属性,牺牲点微小的存储空间换来正确的查找结果
理论看不懂?举个例子你就懂了
需求:
建立3条数据的索引,每条数据包含weibotime(date)、forwardtims(long)、replytimes(int)等属性
数据建立索引后,变成3个文档:文档A、文档B、文档C
weibotime(date)、forwardtims(long)、replytimes(int)
文档A: 有 有 有
文档B: 无 无 有
文档C: 无 无 有
操作:
Q:查找weibotime并且降序排列
A:返回有weibotime属性的文档,并且结果顺序是降序的,显示当前索引里只有文档A
Q:查找replytimes,weibotime降序排列
A:返回当前3文档,并且结果顺序显示是:文档A、文档B、文档C
Q:查找replytimes,weibotime升序排列
A:返回当前3文档,并且结果顺序显示是:文档B、文档C、文档A,看到这里你可能会觉得奇怪,文档B、C不都没有属性和值吗,为什么B一定排在C前面?这是lucene实现的,查找的属性有,但操作的属性如排序操作weibotime属性,但两个文档的属性是没有的,那么文档会按建立的先后顺序返回,不管你是升序或者是降序,结果都是一样的