无法获得修改时间的搜索结果

时间:2018-12-01 11:29:07

标签: lucene

软件包org.apache.lucene.demo中的示例适用于文本搜索。 但是我无法使用它并显示修改时间。 似乎modified字段已处理,但使用它没有成功。

运行 SearchFiles 打印匹配项

输入查询:

+kompl*

但这里没有

+kompl* +modified:[0 TO 9999999999999]

有人可以为此提供示例吗?

1 个答案:

答案 0 :(得分:0)

我错误地认为文件属性对我隐式可用。 但是好吧,我必须自己做。

对于索引,我添加了一个简单的整数

  // provide stored date integer to query for [yyyymmdd]
  Date dt = new Date(lastModified);
  int myDays = (dt.getYear()+1900)*100*100 + (dt.getMonth()+1)*100 + dt.getDate();
  doc.add(new IntPoint("moddate", myDays ));
  doc.add(new StoredField("moddateVal", myDays ));

对于搜索,我通过扩展解析器处理此字段

    public static class QueryParserModdate extends QueryParser {
        public QueryParserModdate(String f, Analyzer a) {
            super(f, a);
        }
        protected Query getRangeQuery(String field, String part1, String part2,
                boolean startInclusive, boolean endInclusive)
                throws ParseException {

            if (field.equalsIgnoreCase("moddate")) {
                int part1Int = Integer.MIN_VALUE;
                int part2Int = Integer.MAX_VALUE;
                try {
                    part1Int = Integer.parseInt(part1);
                } catch (Exception e) {
...
                Query query = IntPoint.newRangeQuery("moddate", part1Int,
                        part2Int);
                return query;
            }
            return super.getRangeQuery(field, part1, part2, startInclusive,
                    endInclusive);
        }

肯定不是很漂亮,但为我工作。