2

我想进行一个查询,它将为我提供日期范围之间的数据以及 lucene 3.0.1 中的另一个 AND 条件。这是两个日期之间的查询代码:

 IndexSearcher searcher = new IndexSearcher(directory);
    String lowerDate = "2013-06-27";
    String upperDate = "2013-06-29";
    boolean includeLower = true;
    boolean includeUpper = true;
    TermRangeQuery query = new TermRangeQuery("created_at",lowerDate, upperDate, includeLower, includeUpper);

    // display search results
    TopDocs topDocs = searcher.search(query, 10);
    for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
        Document doc = searcher.doc(scoreDoc.doc);
        System.out.println(doc.get("id"));
    }

我还有一个索引列文本,如何在此查询中再包含一个 AND 条件,我试图在日期范围内获取结果,该结果在测试列中也包含一些关键字。

4

1 回答 1

2

您需要使用BooleanQuery,例如:

TermRangeQuery dateQuery = new TermRangeQuery("created_at",lowerDate, upperDate, includeLower, includeUpper);
TermQuery keywordQuery = new TermQuery(new Term("keyword", "term"));
BooleanQuery bq = new BooleanQuery();
bq.add(new BooleanClause(dateQuery, BooleanClause.Occur.MUST))
bq.add(new BooleanClause(keywordQuery, BooleanClause.Occur.MUST))

// display search results
TopDocs topDocs = searcher.search(bq, 10);

将两个带有 的子句组合起来BooleanClause.Occur.MUST相当于一个“AND”(查看BooleanClause.Occur 文档MUST中对“ ”、“ SHOULD”和“ MUST_NOT”的描述,以更好地理解您使用 Lucene 的“布尔”逻辑的选项) .

于 2013-08-13T18:44:40.243 回答