Example usage for org.apache.lucene.search BooleanQuery BooleanQuery

List of usage examples for org.apache.lucene.search BooleanQuery BooleanQuery

Introduction

In this page you can find the example usage for org.apache.lucene.search BooleanQuery BooleanQuery.

Prototype

BooleanQuery

Source Link

Usage

From source file:com.kanjiportal.portal.dao.jpa.JpaKanjiDao.java

License:Open Source License

public KanjiList findByPattern(String pattern, String language, int page, int pageSize)
        throws SearchTooGenericException {
    FullTextEntityManager ftem = (FullTextEntityManager) entityManager;
    BooleanQuery finalQuery = new BooleanQuery();
    org.apache.lucene.search.Query languageQuery = null;
    org.apache.lucene.search.Query luceneQuery = buildLuceneQuery(pattern, language);

    KanjiList kanjiList = null;// ww  w  .  j av  a  2s.c  om

    languageQuery = new TermQuery(new Term("meanings.meaning.language.codeIso63901", language));
    finalQuery.add(luceneQuery, BooleanClause.Occur.MUST);
    finalQuery.add(languageQuery, BooleanClause.Occur.MUST);

    try {
        FullTextQuery ftq = ftem.createFullTextQuery(finalQuery, Kanji.class);
        List<Kanji> kanjis = ftq.setMaxResults(pageSize).setFirstResult(page * pageSize).getResultList();
        kanjiList = new KanjiList(kanjis, ftq.getResultSize());

    } catch (BooleanQuery.TooManyClauses e) {
        throw new SearchTooGenericException(e);
    }

    return kanjiList;
}

From source file:com.knowgate.lucene.BugSearcher.java

License:Open Source License

/**
 * Compose a Lucene query based on given parameters
 * @param sLuceneIndexPath String Base path for Lucene indexes excluding WorkArea and table name
 * @param sWorkArea String GUID of WorkArea to be searched, cannot be null
 * @param sProject String GUID f project to which bug belongs
 * @param sReportedBy String/*from w ww.  j  a v  a 2 s .  c  om*/
 * @param sWrittenBy String
 * @param sTitle String
 * @param sFromDate String
 * @param sToDate String
 * @param sType String
 * @param sPriority String
 * @param sSeverity String
 * @param sStatus String
 * @param sText String
 * @param sComments String
 * @param iLimit int
 * @param oSortBy Comparator
 * @return BugRecord[]
 * @throws ParseException
 * @throws IOException
 * @throws NullPointerException
 */
public static BugRecord[] search(String sLuceneIndexPath, String sWorkArea, String sProjectGUID,
        String sReportedBy, String sWrittenBy, String sTitle, Date dtFromDate, Date dtToDate, String sType,
        String sPriority, String sSeverity, String sStatus, String sText, String sComments, int iLimit,
        Comparator oSortBy) throws ParseException, IOException, NullPointerException {

    if (null == sLuceneIndexPath)
        throw new NullPointerException("BugSearcher.search() luceindex parameter cannot be null");

    if (null == sWorkArea)
        throw new NullPointerException("BugSearcher.search() workarea parameter cannot be null");

    if (DebugFile.trace) {
        DebugFile.writeln("Begin BugSearcher.search(" + sLuceneIndexPath + "," + sWorkArea + "," + sProjectGUID
                + "," + sReportedBy + "," + sWrittenBy + "," + sTitle + "," + dtFromDate + "," + dtToDate + ","
                + sType + "," + sPriority + "," + sSeverity + "," + "," + sStatus + "," + sText
                + String.valueOf(iLimit) + ")");
        DebugFile.incIdent();
    }

    BugRecord[] aRetArr;

    BooleanQuery oQry = new BooleanQuery();

    oQry.add(new TermQuery(new Term("workarea", sWorkArea)), BooleanClause.Occur.MUST);

    if (null != sProjectGUID)
        if (sProjectGUID.length() > 0)
            oQry.add(new TermQuery(new Term("container", sProjectGUID)), BooleanClause.Occur.MUST);

    if (null != sWrittenBy)
        if (sWrittenBy.length() > 0)
            oQry.add(new TermQuery(new Term("writer", sWrittenBy)), BooleanClause.Occur.MUST);

    if (null != sReportedBy)
        if (sReportedBy.length() > 0)
            oQry.add(new TermQuery(new Term("author", sReportedBy)), BooleanClause.Occur.MUST);

    if (null != sTitle)
        if (sTitle.length() > 0)
            oQry.add(new TermQuery(new Term("title", sTitle)), BooleanClause.Occur.MUST);

    if (null != sType)
        if (sType.length() > 0)
            oQry.add(new TermQuery(new Term("type", sType)), BooleanClause.Occur.MUST);

    if (null != sStatus)
        if (sStatus.length() > 0)
            oQry.add(new TermQuery(new Term("status", sStatus)), BooleanClause.Occur.MUST);

    if (null != sPriority)
        if (sPriority.length() > 0)
            oQry.add(new TermQuery(new Term("priority", sPriority)), BooleanClause.Occur.MUST);

    if (null != sSeverity)
        if (sSeverity.length() > 0)
            oQry.add(new TermQuery(new Term("severity", sSeverity)), BooleanClause.Occur.MUST);

    if (dtFromDate != null && dtToDate != null)
        oQry.add(
                new TermRangeQuery("created", DateTools.dateToString(dtFromDate, DateTools.Resolution.DAY),
                        DateTools.dateToString(dtToDate, DateTools.Resolution.DAY), true, true),
                BooleanClause.Occur.MUST);
    else if (dtFromDate != null)
        oQry.add(new TermRangeQuery("created", DateTools.dateToString(dtFromDate, DateTools.Resolution.DAY),
                null, true, false), BooleanClause.Occur.MUST);
    else if (dtToDate != null)
        oQry.add(new TermRangeQuery("created", null, DateTools.dateToString(dtToDate, DateTools.Resolution.DAY),
                false, true), BooleanClause.Occur.MUST);
    if (null != sText)
        if (sText.length() > 0)
            oQry.add(new TermQuery(new Term("text", sText)), BooleanClause.Occur.SHOULD);

    if (null != sComments)
        if (sComments.length() > 0)
            oQry.add(new TermQuery(new Term("comments", sComments)), BooleanClause.Occur.SHOULD);

    String sSegments = Gadgets.chomp(sLuceneIndexPath, File.separator) + "k_bugs" + File.separator + sWorkArea;
    if (DebugFile.trace)
        DebugFile.writeln("new IndexSearcher(" + sSegments + ")");
    Directory oFsDir = Indexer.openDirectory(sSegments);
    IndexSearcher oSearch = new IndexSearcher(oFsDir);

    Document oDoc;

    TopDocs oTopSet = oSearch.search(oQry, null, iLimit > 0 ? iLimit : 2147483647);
    if (oTopSet.scoreDocs != null) {
        ScoreDoc[] oTopDoc = oTopSet.scoreDocs;
        int iDocCount = oTopDoc.length;
        aRetArr = new BugRecord[iDocCount];
        for (int d = 0; d < iDocCount; d++) {
            oDoc = oSearch.doc(oTopDoc[d].doc);
            aRetArr[d] = new BugRecord(oTopDoc[d].score, Integer.parseInt(oDoc.get("number")), oDoc.get("guid"),
                    oDoc.get("container"), oDoc.get("title"), oDoc.get("author"), oDoc.get("created"),
                    oDoc.get("type"), oDoc.get("status"), oDoc.get("priority"), oDoc.get("severity"),
                    oDoc.get("abstract"));
        } // next
    } else {
        aRetArr = null;
    }

    oSearch.close();
    oFsDir.close();

    if (oSortBy != null) {
        Arrays.sort(aRetArr, oSortBy);
    }

    if (DebugFile.trace) {
        DebugFile.decIdent();
        if (null == aRetArr)
            DebugFile.writeln("End BugSearcher.search() : no records found");
        else
            DebugFile.writeln("End BugSearcher.search() : " + String.valueOf(aRetArr.length));
    }
    return aRetArr;
}

From source file:com.knowgate.lucene.ContactSearcher.java

License:Open Source License

/**
 * Compose a Lucene query based on given parameters
 * @param sLuceneIndexPath String Base path for Lucene indexes excluding WorkArea and table name
 * @param sWorkArea String GUID of WorkArea to be searched, cannot be null
 * @param sProject String GUID f project to which bug belongs
 * @param sReportedBy String/*from   w  ww. j  av  a2s.  co m*/
 * @param sWrittenBy String
 * @param sTitle String
 * @param sFromDate String
 * @param sToDate String
 * @param sType String
 * @param sPriority String
 * @param sSeverity String
 * @param sStatus String
 * @param sText String
 * @param sComments String
 * @param iLimit int
 * @param oSortBy Comparator
 * @return BugRecord[]
 * @throws ParseException
 * @throws IOException
 * @throws NullPointerException
 */
public static ContactRecord[] search(Properties oProps, String sWorkArea, String values[],
        boolean obligatorio[]) throws ParseException, IOException, NullPointerException {

    if (null == oProps.getProperty("luceneindex"))
        throw new NullPointerException("ContactSearcher.search() luceindex parameter cannot be null");

    if (null == sWorkArea)
        throw new NullPointerException("ContactSearcher.search() workarea parameter cannot be null");

    if (DebugFile.trace) {
        DebugFile.writeln("Begin ContactSearcher.search(" + oProps.getProperty("luceneindex") + "," + sWorkArea
                + "," + String.valueOf(20) + ")");
        DebugFile.incIdent();
    }

    BooleanQuery oQry = new BooleanQuery();

    oQry.add(new TermQuery(new Term("workarea", sWorkArea)), BooleanClause.Occur.MUST);

    for (int i = 0; i < values.length; i++) {
        if (obligatorio[i]) {
            oQry.add(new TermQuery(new Term("value", values[i])), BooleanClause.Occur.MUST);
        } else {
            oQry.add(new TermQuery(new Term("value", values[i])), BooleanClause.Occur.SHOULD);
        }
    }

    String sSegments = Gadgets.chomp(oProps.getProperty("luceneindex"), File.separator) + "k_contacts"
            + File.separator + sWorkArea;
    if (DebugFile.trace)
        DebugFile.writeln("new IndexSearcher(" + sSegments + ")");

    File oDir = new File(sSegments);
    if (!oDir.exists()) {
        try {
            Indexer.rebuild(oProps, "k_contacts", sWorkArea);
        } catch (Exception e) {
            if (DebugFile.trace)
                DebugFile.writeln(e.getMessage());
        }
    }
    Directory oFsDir = Indexer.openDirectory(sSegments);
    IndexSearcher oSearch = new IndexSearcher(oFsDir);

    Document oDoc;

    ContactRecord aRetArr[] = null;

    TopDocs oTopSet = oSearch.search(oQry, null, 20);
    if (oTopSet.scoreDocs != null) {
        ScoreDoc[] oTopDoc = oTopSet.scoreDocs;
        int iDocCount = oTopDoc.length;
        aRetArr = new ContactRecord[iDocCount];
        for (int d = 0; d < iDocCount; d++) {
            oDoc = oSearch.doc(oTopDoc[d].doc);
            // String[] aAbstract = Gadgets.split(oSearch.doc(oTopDoc[d].doc).get("abstract"), '');
            aRetArr[d] = new ContactRecord(oTopDoc[d].score, oDoc.get("author"), oDoc.get("workarea"),
                    oDoc.get("guid"), oDoc.get("value"));
        } // next
    } else {
        aRetArr = null;
    }

    oSearch.close();
    oFsDir.close();

    if (DebugFile.trace) {
        DebugFile.decIdent();
        if (null == aRetArr)
            DebugFile.writeln("End ContactSearcher.search() : no records found");
        else
            DebugFile.writeln("End ContactSearcher.search() : " + String.valueOf(aRetArr.length));
    }
    return aRetArr;
}

From source file:com.knowgate.lucene.NewsMessageSearcher.java

License:Open Source License

/**
 * Find out if a given NewsMessage is already indexed
 * @param sLuceneIndexPath String Base path for Lucene indexes excluding WorkArea and table name
 * @param sWorkArea String GUID of WorkArea to be searched (optional, may be null)
 * @param sNewsGroupCategoryName String GUID or Category Name of NewsGroup to which message belongs (optional, may be null)
 * @param sAuthor String//from ww w  . j  a v  a2  s.c om
 * @param sTitle String
 * @param sText String
 * @param iLimit int
 * @param oSortBy Comparator
 * @return NewsMessageRecord[] An Array of NewsMessageRecord objects or <b>null</b> if no messages where found matching the given criteria
 * @throws ParseException
 * @throws IOException
 * @throws NullPointerException
 */
public static boolean isIndexed(String sLuceneIndexPath, String sWorkArea, String sNewsGroupCategoryName,
        String sMsgId) throws ParseException, IOException, NullPointerException {

    boolean bIsIndexed = false;

    if (null == sLuceneIndexPath)
        throw new NullPointerException("NewsMessageSearcher.search() luceneindex parameter cannot be null");

    if (DebugFile.trace) {
        DebugFile.writeln("Begin NewsMessageSearcher.isIndexed(" + sLuceneIndexPath + "," + sWorkArea + ","
                + sNewsGroupCategoryName + "," + sMsgId + ")");
        DebugFile.incIdent();
    }

    BooleanQuery oQrx = new BooleanQuery();
    oQrx.add(new TermQuery(new Term("guid", sMsgId)), BooleanClause.Occur.MUST);

    if (null != sWorkArea)
        oQrx.add(new TermQuery(new Term("workarea", sWorkArea)), BooleanClause.Occur.MUST);

    if (null != sNewsGroupCategoryName)
        oQrx.add(new TermQuery(new Term("container", sNewsGroupCategoryName)), BooleanClause.Occur.MUST);

    String sSegments = Gadgets.chomp(sLuceneIndexPath, File.separator) + "k_newsmsgs" + File.separator
            + sWorkArea;
    if (DebugFile.trace)
        DebugFile.writeln("new IndexSearcher(" + sSegments + ")");
    Directory oDir = Indexer.openDirectory(sSegments);
    IndexSearcher oSearch = new IndexSearcher(oDir);

    if (DebugFile.trace)
        DebugFile.writeln("IndexSearcher.search(" + oQrx.toString() + ")");
    TopDocs oTopSet = oSearch.search(oQrx, null, 1);
    if (oTopSet.scoreDocs != null) {
        ScoreDoc[] oTopDoc = oTopSet.scoreDocs;
        bIsIndexed = (oTopDoc.length > 0);
    }
    oSearch.close();
    oDir.close();

    if (DebugFile.trace) {
        DebugFile.decIdent();
        DebugFile.writeln("End NewsMessageSearcher.isIndexed() : " + String.valueOf(bIsIndexed));
    }
    return bIsIndexed;
}

From source file:com.knowgate.lucene.NewsMessageSearcher.java

License:Open Source License

/**
 * Compose a Lucene query based on given parameters
 * @param sLuceneIndexPath String Base path for Lucene indexes excluding WorkArea and table name
 * @param sWorkArea String GUID of WorkArea to be searched, cannot be null
 * @param sGroup sNewsGroupCategoryName String GUID or Category Name of NewsGroup to which message belongs (optional, may be null)
 * @param sAuthor String//from  ww w .  j  a v  a2s  . c o m
 * @param sTitle String
 * @param sText String
 * @param iLimit int
 * @param oSortBy Comparator
 * @return NewsMessageRecord[] An Array of NewsMessageRecord objects or <b>null</b> if no messages where found matching the given criteria
 * @throws ParseException
 * @throws IOException
 * @throws NullPointerException
 */
public static NewsMessageRecord[] search(String sLuceneIndexPath, String sWorkArea,
        String sNewsGroupCategoryName, String sAuthor, String sTitle, Date dtFromDate, Date dtToDate,
        String sText, int iLimit, Comparator oSortBy) throws ParseException, IOException, NullPointerException {

    if (null == sLuceneIndexPath)
        throw new NullPointerException("NewsMessageSearcher.search() luceneindex parameter cannot be null");

    if (null == sWorkArea)
        throw new NullPointerException("NewsMessageSearcher.search() workarea parameter cannot be null");

    if (DebugFile.trace) {
        DebugFile.writeln("Begin NewsMessageSearcher.search(" + sLuceneIndexPath + "," + sWorkArea + ","
                + sNewsGroupCategoryName + "," + sAuthor + "," + sTitle + "," + dtFromDate + "," + dtToDate
                + "," + sText + "," + String.valueOf(iLimit) + ")");
        DebugFile.incIdent();
    }

    NewsMessageRecord[] aRetArr;

    BooleanQuery oQrx = new BooleanQuery();

    oQrx.add(new TermQuery(new Term("workarea", sWorkArea)), BooleanClause.Occur.MUST);

    if (null != sNewsGroupCategoryName)
        oQrx.add(new TermQuery(new Term("container", sNewsGroupCategoryName)), BooleanClause.Occur.MUST);

    if (dtFromDate != null && dtToDate != null)
        oQrx.add(
                new TermRangeQuery("created", DateTools.dateToString(dtFromDate, DateTools.Resolution.DAY),
                        DateTools.dateToString(dtToDate, DateTools.Resolution.DAY), true, true),
                BooleanClause.Occur.MUST);
    else if (dtFromDate != null)
        oQrx.add(new TermRangeQuery("created", DateTools.dateToString(dtFromDate, DateTools.Resolution.DAY),
                null, true, false), BooleanClause.Occur.MUST);

    else if (dtToDate != null)
        oQrx.add(new TermRangeQuery("created", null, DateTools.dateToString(dtToDate, DateTools.Resolution.DAY),
                false, true), BooleanClause.Occur.MUST);

    BooleanQuery oQry = new BooleanQuery();

    if (null != sAuthor)
        oQry.add(new TermQuery(new Term("author", sAuthor)), BooleanClause.Occur.SHOULD);

    if (null != sTitle)
        oQry.add(new TermQuery(new Term("title", sTitle)), BooleanClause.Occur.SHOULD);

    if (null != sText)
        oQry.add(new TermQuery(new Term("text", escape(Gadgets.ASCIIEncode(sText).toLowerCase()))),
                BooleanClause.Occur.SHOULD);

    oQrx.add(oQry, BooleanClause.Occur.MUST);

    String sSegments = Gadgets.chomp(sLuceneIndexPath, File.separator) + "k_newsmsgs" + File.separator
            + sWorkArea;
    if (DebugFile.trace)
        DebugFile.writeln("new IndexSearcher(" + sSegments + ")");
    Directory oDir = Indexer.openDirectory(sSegments);
    IndexSearcher oSearch = new IndexSearcher(oDir);

    Document oDoc;

    if (DebugFile.trace)
        DebugFile.writeln("IndexSearcher.search(" + oQrx.toString() + ")");
    TopDocs oTopSet = oSearch.search(oQrx, null, iLimit > 0 ? iLimit : 2147483647);
    if (oTopSet.scoreDocs != null) {
        ScoreDoc[] oTopDoc = oTopSet.scoreDocs;
        final int iDocCount = oTopDoc.length <= iLimit ? oTopDoc.length : iLimit;
        aRetArr = new NewsMessageRecord[iDocCount];
        for (int d = 0; d < iDocCount; d++) {
            oDoc = oSearch.doc(oTopDoc[d].doc);
            try {
                aRetArr[d] = new NewsMessageRecord(oTopDoc[d].score, oDoc.get("workarea"), oDoc.get("guid"),
                        oDoc.get("thread"), oDoc.get("container"), oDoc.get("title"), oDoc.get("author"),
                        DateTools.stringToDate(oDoc.get("created")), oDoc.get("abstract"));
            } catch (java.text.ParseException neverthrown) {
                throw new ParseException("NewsMessageSearcher.search() Error parsing date "
                        + oDoc.get("created") + " of document " + oDoc.get("guid"));
            }
        } // next
    } else {
        aRetArr = null;
    }

    oSearch.close();
    oDir.close();

    if (oSortBy != null) {
        Arrays.sort(aRetArr, oSortBy);
    }

    if (DebugFile.trace) {
        DebugFile.decIdent();
        if (null == aRetArr)
            DebugFile.writeln("End NewsMessageSearcher.search() : no records found");
        else
            DebugFile.writeln("End NewsMessageSearcher.search() : " + String.valueOf(aRetArr.length));
    }
    return aRetArr;
}

From source file:com.leavesfly.lia.advsearching.BooksLikeThis.java

License:Apache License

public Document[] docsLike(int id, int max) throws IOException {
    Document doc = reader.document(id);

    String[] authors = doc.getValues("author");
    BooleanQuery authorQuery = new BooleanQuery(); // #3
    for (String author : authors) { // #3
        authorQuery.add(new TermQuery(new Term("author", author)), // #3
                BooleanClause.Occur.SHOULD); // #3
    }//from   w ww  . ja  v a  2  s.  c om
    authorQuery.setBoost(2.0f);

    TermFreqVector vector = // #4
            reader.getTermFreqVector(id, "subject"); // #4

    BooleanQuery subjectQuery = new BooleanQuery(); // #4
    for (String vecTerm : vector.getTerms()) { // #4
        TermQuery tq = new TermQuery( // #4
                new Term("subject", vecTerm)); // #4
        subjectQuery.add(tq, BooleanClause.Occur.SHOULD); // #4
    }

    BooleanQuery likeThisQuery = new BooleanQuery(); // #5
    likeThisQuery.add(authorQuery, BooleanClause.Occur.SHOULD); // #5
    likeThisQuery.add(subjectQuery, BooleanClause.Occur.SHOULD); // #5

    likeThisQuery.add(new TermQuery( // #6
            new Term("isbn", doc.get("isbn"))), BooleanClause.Occur.MUST_NOT); // #6

    // System.out.println("  Query: " +
    // likeThisQuery.toString("contents"));
    TopDocs hits = searcher.search(likeThisQuery, 10);
    int size = max;
    if (max > hits.scoreDocs.length)
        size = hits.scoreDocs.length;

    Document[] docs = new Document[size];
    for (int i = 0; i < size; i++) {
        docs[i] = reader.document(hits.scoreDocs[i].doc);
    }

    return docs;
}

From source file:com.leavesfly.lia.advsearching.SortingExample.java

License:Apache License

public static void main(String[] args) throws Exception {
    Query allBooks = new MatchAllDocsQuery();

    QueryParser parser = new QueryParser(Version.LUCENE_30, // #1
            "contents", // #1
            new StandardAnalyzer( // #1
                    Version.LUCENE_30)); // #1
    BooleanQuery query = new BooleanQuery(); // #1
    query.add(allBooks, BooleanClause.Occur.SHOULD); // #1
    query.add(parser.parse("java OR action"), BooleanClause.Occur.SHOULD); // #1

    Directory directory = TestUtil.getBookIndexDirectory(); // #2
    SortingExample example = new SortingExample(directory); // #2

    example.displayResults(query, Sort.RELEVANCE);

    example.displayResults(query, Sort.INDEXORDER);

    example.displayResults(query, new Sort(new SortField("category", SortField.STRING)));

    example.displayResults(query, new Sort(new SortField("pubmonth", SortField.INT, true)));

    example.displayResults(query, new Sort(new SortField("category", SortField.STRING), SortField.FIELD_SCORE,
            new SortField("pubmonth", SortField.INT, true)));

    example.displayResults(query,/*from  w  w w.  j  a v a2  s . c om*/
            new Sort(new SortField[] { SortField.FIELD_SCORE, new SortField("category", SortField.STRING) }));
    directory.close();
}

From source file:com.leavesfly.lia.extsearch.filters.SpecialsFilterTest.java

License:Apache License

public void testFilteredQuery() throws Exception {
    String[] isbns = new String[] { "9780880105118" }; // #1

    SpecialsAccessor accessor = new TestSpecialsAccessor(isbns);
    Filter filter = new SpecialsFilter(accessor);

    WildcardQuery educationBooks = // #2
            new WildcardQuery(new Term("category", "*education*")); // #2
    FilteredQuery edBooksOnSpecial = // #2
            new FilteredQuery(educationBooks, filter); // #2

    TermQuery logoBooks = // #3
            new TermQuery(new Term("subject", "logo")); // #3

    BooleanQuery logoOrEdBooks = new BooleanQuery(); // #4
    logoOrEdBooks.add(logoBooks, BooleanClause.Occur.SHOULD); // #4
    logoOrEdBooks.add(edBooksOnSpecial, BooleanClause.Occur.SHOULD); // #4

    TopDocs hits = searcher.search(logoOrEdBooks, 10);
    System.out.println(logoOrEdBooks.toString());
    assertEquals("Papert and Steiner", 2, hits.totalHits);
}

From source file:com.leavesfly.lia.searching.BooleanQueryTest.java

License:Apache License

public void testOr() throws Exception {
    TermQuery methodologyBooks = new TermQuery( // #1
            new Term("category", // #1
                    "/technology/computers/programming/methodology")); // #1

    TermQuery easternPhilosophyBooks = new TermQuery( // #2
            new Term("category", // #2
                    "/philosophy/eastern")); // #2

    BooleanQuery enlightenmentBooks = new BooleanQuery(); // #3
    enlightenmentBooks.add(methodologyBooks, // #3
            BooleanClause.Occur.SHOULD); // #3
    enlightenmentBooks.add(easternPhilosophyBooks, // #3
            BooleanClause.Occur.SHOULD); // #3

    Directory dir = TestUtil.getBookIndexDirectory();
    IndexSearcher searcher = new IndexSearcher(dir);
    TopDocs matches = searcher.search(enlightenmentBooks, 10);
    System.out.println("or = " + enlightenmentBooks);

    assertTrue(TestUtil.hitsIncludeTitle(searcher, matches, "Extreme Programming Explained"));
    assertTrue(TestUtil.hitsIncludeTitle(searcher, matches, "Tao Te Ching \u9053\u5FB7\u7D93"));
    searcher.close();// w ww  .jav  a2  s  .  c  o  m
    dir.close();
}

From source file:com.leavesfly.lia.tool.ChainedFilterTest.java

License:Apache License

public void setUp() throws Exception {
    directory = new RAMDirectory();
    IndexWriter writer = new IndexWriter(directory, new WhitespaceAnalyzer(),
            IndexWriter.MaxFieldLength.UNLIMITED);

    Calendar cal = Calendar.getInstance();
    cal.set(2009, 1, 1, 0, 0); // A

    for (int i = 0; i < MAX; i++) {
        Document doc = new Document();
        doc.add(new Field("key", "" + (i + 1), Field.Store.YES, Field.Index.NOT_ANALYZED));
        doc.add(new Field("owner", (i < MAX / 2) ? "bob" : "sue", Field.Store.YES, Field.Index.NOT_ANALYZED));
        doc.add(new Field("date", DateTools.timeToString(cal.getTimeInMillis(), DateTools.Resolution.DAY),
                Field.Store.YES, Field.Index.NOT_ANALYZED));
        writer.addDocument(doc);//w ww . ja  v  a 2 s.c  o  m

        cal.add(Calendar.DATE, 1);
    }

    writer.close();

    searcher = new IndexSearcher(directory);

    BooleanQuery bq = new BooleanQuery(); // B
    bq.add(new TermQuery(new Term("owner", "bob")), // B
            BooleanClause.Occur.SHOULD); // B
    bq.add(new TermQuery(new Term("owner", "sue")), // B
            BooleanClause.Occur.SHOULD); // B
    query = bq;

    cal.set(2099, 1, 1, 0, 0);
    dateFilter = TermRangeFilter.Less("date", // C
            DateTools.timeToString( // C
                    cal.getTimeInMillis(), // C
                    DateTools.Resolution.DAY));// C

    bobFilter = new CachingWrapperFilter( // D
            new QueryWrapperFilter( // D
                    new TermQuery(new Term("owner", "bob")))); // D

    sueFilter = new CachingWrapperFilter( // E
            new QueryWrapperFilter( // E
                    new TermQuery(new Term("owner", "sue")))); // E
}