我有一个存储出生日期的索引,我想搜索出生日期在某个月/日的 X 天内的任何人。例如,我想知道是否有人的生日在特定天数内到来,无论他们出生于哪一年。我将如何使用 Solr 执行此查询? (在“生日”字段上)
作为后续,假设这个查询经常执行,我应该索引出生日期以外的东西吗?比如只是月日对?执行此类查询的最有效方法是什么(从查询和索引的角度来看)?
最佳答案
您需要记住 Solr 使用 Lucene,并且截至目前 - 一切都以字符串形式存储和索引。
范围查询原样不起作用,因为日期通常在内部索引为 YYYYMMDD
在索引中有一个单独的字段来存储 MMDD 字符串将很容易搜索。或者,如果您不想要额外的字段,并且愿意以不同的方式索引日期,请在索引时重新排列顺序,以便将生日编入索引 MMDDYYY
然后你就可以构造rangequeries了,因为你需要匹配的所有东西都在字符串的前面,并且lucene是按字典序匹配的
(ba -> bc 的范围查询将匹配 BAt、BAseball,但不匹配 BEcause。)
像这样的索引是一次性固定成本,不会破坏除按时间顺序排列的内部安排之外的任何内容。如果这是一个问题,请使用两个字段,磁盘空间很便宜!)
关于solr - 如何在 Solr 中进行生日(不是出生日期)搜索?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/702168/