我们正在为各种搜索应用程序使用 solr 索引。在大多数情况下,我们就像使用管理界面一样使用它。例如:
+text:Mr +text:burns +publish_date[2012-09-10T00:00:00Z TO 2012-10-10T00:00:00Z]
这工作正常。
我的问题是,在一个应用程序中,我们直接对索引使用复杂的 lucene 查询(不使用 solr),在这些查询中我找不到如何搜索日期字段。
在 schema.xml 中:
<field name="publish_date" type="date" indexed="true" stored="true"/>
似乎 solr 将日期存储为以毫秒为单位的 unix 时间,当从索引中提取字段时,它看起来像1336867200000
在 lucene 中,我尝试了所有我能想到的查询:
TermRangeQuery nq1 = new TermRangeQuery("publish_date", "1299628800000", "1336867200000", true, true);
TermRangeQuery nq1 = new TermRangeQuery("publish_date", "1299628800", "1336867200", true, true);
TermRangeQuery nq1 = new TermRangeQuery("publish_date", "2012-09-10T00:00:00Z", "2012-10-10T00:00:00Z", true, true);
TermRangeQuery nq1 = new TermRangeQuery("publish_date", "20120910", "20121010", true, true);
NumericRangeQuery nq1 = NumericRangeQuery.newLongRange("publish_date", 1299628800, 1336867200, true, true);
和其他一些尝试......
返回结果的唯一查询是
TermRangeQuery nq1 = new TermRangeQuery("publish_date", null, null, true, true);
当然,这是一个带有“开放端点”的查询,但它似乎确实适用于该字段被索引为字符串(同样不适用于 int-range 或 long-range)。
令人沮丧的是,这显然是可能的,我只需要弄清楚 solr 的剂量是如何影响它的日期范围的。
任何人都知道如何执行此搜索?
任何帮助,将不胜感激。