2 votes

recherche avec lucene dans la plage de dates et l'opérateur AND

Je veux faire une requête qui me donnera des données entre deux dates et aussi par une condition AND supplémentaire dans lucene 3.0.1. Voici le code pour une requête entre deux 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"));
    }

J'ai une autre colonne indexée texte, comment puis-je inclure une autre condition AND avec cette requête, j'essaie d'obtenir des résultats dans une plage de dates qui contient également un mot clé dans la colonne test.

2voto

femtoRgon Points 13517

Vous devez utiliser un Requête booléenne comme :

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

En combinant les deux clauses, chacune avec BooleanClause.Occur.MUST est équivalent à un "AND" (voir les descriptions des "". MUST ", " SHOULD " et " MUST_NOT " dans le Documentation sur BooleanClause.Occur pour mieux comprendre vos options avec la logique "booléenne" de Lucene).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X