naveen kumar
naveen kumar

Reputation: 151

search with in date range lucene and AND operator

I want to make a query which will give me data between date range and also by one more AND condition in lucene 3.0.1. This is the code for query between two dates :

 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"));
    }

I have one more indexed column text, how can I include one more AND condition with this query, I am trying to get results within date range which also contain some keyword in test column.

Upvotes: 2

Views: 3346

Answers (1)

femtoRgon
femtoRgon

Reputation: 33351

You need to use a BooleanQuery, like:

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);

Combining the two clauses, each with BooleanClause.Occur.MUST, is equivalent to an "AND" (take a look at the descriptions of the "MUST", "SHOULD" and "MUST_NOT" in the BooleanClause.Occur documentation to better understand your options with Lucene's "boolean" logic).

Upvotes: 2

Related Questions