我用下面的语句来索引日期:范围查询使用Lucene 2.9.x - 在索引中的日期不工作
luceneDoc.add(new NumericField(key).setLongValue(date.getTime()));
我也用语句如下添加文本属性:
luceneDoc.add(new Field(key, value, Field.Store.YES, Field.Index.ANALYZED));
然后我执行文本属性查询:
author:hans
这完美的作品。但是当我执行范围查询时,没有任何回复:
my-date-property:[20100101 TO 20110101]
我在这里丢失了什么?
我看了一下Luke的索引,我看到了文档
的所有文本属性,但日期属性只出现在总览页面中......也许这是正常的
。 其实我如果我添加像这样看日期属性:
NumericField field = new NumericField(key, Field.Store.YES, true);
field.setLongValue(date.getTime());
luceneDoc.add(field);
但是:查询仍然无法正常工作!也许它只适用于使用查询生成器的Java?我还没有尝试过。但是,如果文本查询也可以工作,那将会很棒。任何想法???
谢谢,我会试试这个...所以你也说标准查询解析器支持范围查询,对吧?因为['Moleski'](http://stackoverflow.com/questions/5835232/range-query-with-lucene-2-9-x-dates-in-index-are-not-working/5844872#5844872)说不同的东西... – basZero 2011-05-01 08:46:52
只是一个问题:通过添加一个'Field'而不是'NumericField'我假设它被存储为索引中的TEXT属性。目前我在索引中(通过Luke)看到我的日期值为DATE。如果它存储为TEXT,我猜你不能通过API进行范围查询,对吧?如果是这样,它也不是我想要的... – basZero 2011-05-01 10:31:58
是的,你可以对字符串进行范围查询,参见http://lucene.apache.org/java/2_4_0/queryparsersyntax.html#Range%20Searches。 – 2011-05-02 08:01:26