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.liferay.portal.search.lucene.LuceneHelperImpl.java

License:Open Source License

public void addRequiredTerm(BooleanQuery booleanQuery, String field, String[] values, boolean like) {

    if (values == null) {
        return;/*  w  ww  . j  a v a 2  s. co  m*/
    }

    BooleanQuery query = new BooleanQuery();

    for (String value : values) {
        addTerm(query, field, value, like);
    }

    booleanQuery.add(query, BooleanClause.Occur.MUST);
}

From source file:com.liferay.portal.search.solr.internal.filter.BooleanFilterTranslatorImpl.java

License:Open Source License

@Override
public org.apache.lucene.search.Query translate(BooleanFilter booleanFilter,
        FilterVisitor<org.apache.lucene.search.Query> filterVisitor) {

    BooleanQuery booleanQuery = new BooleanQuery();

    for (BooleanClause<Filter> booleanClause : booleanFilter.getMustBooleanClauses()) {

        org.apache.lucene.search.Query luceneQuery = translate(booleanClause, filterVisitor);

        booleanQuery.add(luceneQuery, org.apache.lucene.search.BooleanClause.Occur.MUST);
    }/*w  w w. j a v  a 2 s.  c o m*/

    for (BooleanClause<Filter> booleanClause : booleanFilter.getMustNotBooleanClauses()) {

        org.apache.lucene.search.Query luceneQuery = translate(booleanClause, filterVisitor);

        booleanQuery.add(luceneQuery, org.apache.lucene.search.BooleanClause.Occur.MUST_NOT);
    }

    for (BooleanClause<Filter> booleanClause : booleanFilter.getShouldBooleanClauses()) {

        org.apache.lucene.search.Query luceneQuery = translate(booleanClause, filterVisitor);

        booleanQuery.add(luceneQuery, org.apache.lucene.search.BooleanClause.Occur.SHOULD);
    }

    return booleanQuery;
}

From source file:com.liferay.portal.search.solr.internal.filter.ExistsFilterTranslatorImpl.java

License:Open Source License

@Override
public org.apache.lucene.search.Query translate(ExistsFilter existsFilter) {
    BooleanQuery booleanQuery = new BooleanQuery();

    MatchAllDocsQuery matchAllDocsQuery = new MatchAllDocsQuery();

    booleanQuery.add(matchAllDocsQuery, BooleanClause.Occur.SHOULD);

    TermRangeQuery termRangeQuery = TermRangeQuery.newStringRange(existsFilter.getField(), "*", "*", true,
            true);/*from  w  w  w.  j  a  v  a  2  s.  c om*/

    booleanQuery.add(termRangeQuery, BooleanClause.Occur.MUST);

    return booleanQuery;
}

From source file:com.liferay.portal.search.solr.internal.filter.MissingFilterTranslatorImpl.java

License:Open Source License

@Override
public org.apache.lucene.search.Query translate(MissingFilter missingFilter) {

    BooleanQuery booleanQuery = new BooleanQuery();

    MatchAllDocsQuery matchAllDocsQuery = new MatchAllDocsQuery();

    booleanQuery.add(matchAllDocsQuery, BooleanClause.Occur.SHOULD);

    TermRangeQuery termRangeQuery = TermRangeQuery.newStringRange(missingFilter.getField(), "*", "*", true,
            true);// w  w  w .j  ava  2s . co  m

    booleanQuery.add(termRangeQuery, BooleanClause.Occur.MUST_NOT);

    return booleanQuery;
}

From source file:com.liferay.portal.search.solr.internal.filter.TermsFilterTranslatorImpl.java

License:Open Source License

@Override
public org.apache.lucene.search.Query translate(TermsFilter termsFilter) {
    BooleanQuery booleanQuery = new BooleanQuery();

    String field = termsFilter.getField();

    for (String value : termsFilter.getValues()) {
        Term term = new Term(field, value);

        TermQuery termQuery = new TermQuery(term);

        if (termsFilter.getExecution() == TermsFilter.Execution.AND) {
            booleanQuery.add(termQuery, BooleanClause.Occur.MUST);
        } else {/* w  w  w  . j  a  va  2  s. c  om*/
            booleanQuery.add(termQuery, BooleanClause.Occur.SHOULD);
        }
    }

    return booleanQuery;
}

From source file:com.liferay.portal.search.solr.internal.query.MultiMatchQueryTranslatorImpl.java

License:Open Source License

@Override
public org.apache.lucene.search.Query translate(MultiMatchQuery multiMatchQuery) {

    BooleanQuery booleanQuery = new BooleanQuery();

    MultiMatchQuery.Type multiMatchQueryType = multiMatchQuery.getType();

    Map<String, Float> fieldBoosts = multiMatchQuery.getFieldsBoosts();

    for (String field : multiMatchQuery.getFields()) {
        Term term = new Term(field, multiMatchQuery.getValue());

        Query query = null;//from w  w  w  .  ja  v a  2  s .com

        if (multiMatchQueryType == MultiMatchQuery.Type.PHRASE) {
            PhraseQuery phraseQuery = new PhraseQuery();

            phraseQuery.add(term);

            if (multiMatchQuery.getSlop() != null) {
                phraseQuery.setSlop(multiMatchQuery.getSlop());
            }

            query = phraseQuery;
        } else if (multiMatchQueryType == MultiMatchQuery.Type.PHRASE_PREFIX) {

            query = new PrefixQuery(term);
        } else {
            query = new TermQuery(term);
        }

        if (fieldBoosts.containsKey(field)) {
            Float fieldBoost = fieldBoosts.get(field);

            query.setBoost(fieldBoost);
        }

        booleanQuery.add(query, BooleanClause.Occur.SHOULD);
    }

    return booleanQuery;
}

From source file:com.liusoft.dlog4j.search.SearchProxy.java

License:Open Source License

/**
 * ?//from ww  w . j a va2  s  .c  o  m
 * @param params
 * @return
 * @throws Exception 
 */
public static List search(SearchParameter params) throws Exception {
    if (params == null)
        return null;

    SearchEnabled searching = (SearchEnabled) params.getSearchObject().newInstance();

    StringBuffer path = new StringBuffer(_baseIndexPath);
    path.append(searching.name());
    File f = new File(path.toString());
    if (!f.exists())
        return null;

    IndexSearcher searcher = new IndexSearcher(path.toString());

    //?
    BooleanQuery comboQuery = new BooleanQuery();
    int _query_count = 0;
    StringTokenizer st = new StringTokenizer(params.getSearchKey());
    while (st.hasMoreElements()) {
        String q = st.nextToken();
        String[] indexFields = searching.getIndexFields();
        for (int i = 0; i < indexFields.length; i++) {
            QueryParser qp = new QueryParser(indexFields[i], analyzer);
            try {
                Query subjectQuery = qp.parse(q);
                comboQuery.add(subjectQuery, BooleanClause.Occur.SHOULD);
                _query_count++;
            } catch (Exception e) {
                log.error("Add query parameter failed. key=" + q, e);
            }
        }
    }

    if (_query_count == 0)//?
        return null;

    //??
    MultiFilter multiFilter = null;
    HashMap conds = params.getConditions();
    if (conds != null) {
        Iterator keys = conds.keySet().iterator();
        while (keys.hasNext()) {
            if (multiFilter == null)
                multiFilter = new MultiFilter(0);
            String key = (String) keys.next();
            multiFilter.add(new FieldFilter(key, conds.get(key).toString()));
        }
    }

    /*
     * Creates a sort, possibly in reverse,
     * by terms in the given field with the type of term values explicitly given.
     */
    SortField[] s_fields = new SortField[2];
    s_fields[0] = SortField.FIELD_SCORE;
    s_fields[1] = new SortField(searching.getKeywordField(), SortField.INT, true);
    Sort sort = new Sort(s_fields);

    Hits hits = searcher.search(comboQuery, multiFilter, sort);
    int numResults = hits.length();
    //System.out.println(numResults + " found............................");
    int result_count = Math.min(numResults, MAX_RESULT_COUNT);
    List results = new ArrayList(result_count);
    for (int i = 0; i < result_count; i++) {
        Document doc = (Document) hits.doc(i);
        //Java
        Object result = params.getSearchObject().newInstance();
        Enumeration fields = doc.fields();
        while (fields.hasMoreElements()) {
            Field field = (Field) fields.nextElement();
            //System.out.println(field.name()+" -- "+field.stringValue());
            if (CLASSNAME_FIELD.equals(field.name()))
                continue;
            //?
            if (!field.isStored())
                continue;
            //System.out.println("=========== begin to mapping ============");
            //String --> anything
            Class fieldType = getNestedPropertyType(result, field.name());
            //System.out.println(field.name()+", class = " + fieldType.getName());
            Object fieldValue = null;
            if (fieldType.equals(Date.class))
                fieldValue = new Date(Long.parseLong(field.stringValue()));
            else
                fieldValue = ConvertUtils.convert(field.stringValue(), fieldType);
            //System.out.println(fieldValue+", class = " + fieldValue.getClass().getName());
            setNestedProperty(result, field.name(), fieldValue);
        }
        results.add(result);
    }

    return results;
}

From source file:com.luc.searcher.LuceneFileSearcher.java

License:Apache License

public List<String> search(File indexDir, String query) throws IOException, ParseException {

    list = new ArrayList<String>();

    dir = new SimpleFSDirectory(indexDir, null);

    pQuery = new PhraseQuery();

    String[] splittedQuery = query.split(" ");

    /*/*from w  w w .ja v  a2  s  .c  om*/
     * Build a Phrase Query 
     */

    for (int i = 0; i < splittedQuery.length; i++) {

        pQuery.add(new Term("contents", splittedQuery[i]));

    }

    pQuery.setSlop(5);

    indexSearcher = new IndexSearcher(dir);

    /*
     * Call query parser to generate search query
     */

    qp = new QueryParser(Version.LUCENE_35, "contents", new StandardAnalyzer(Version.LUCENE_35));

    q = qp.parse(query);

    /*
     * create a boolean query using phrase query and output of query parser to get a query for better outputs
     */

    bQuery = new BooleanQuery();
    bQuery.add(q, BooleanClause.Occur.SHOULD);
    bQuery.add(pQuery, BooleanClause.Occur.SHOULD);

    /*
     * Retrive files Matching the query
     */

    TopDocs topDocs = indexSearcher.search(bQuery, 10);

    for (int i = 0; i < topDocs.totalHits; i++) {

        ScoreDoc match = topDocs.scoreDocs[i];

        Document doc = indexSearcher.doc(match.doc);

        list.add(doc.get("filename"));

        /*
                
        System.out.println(doc.get("filename"));
                
        */

    }

    return list;

}

From source file:com.mathworks.xzheng.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  ww  w .  j  a va 2 s .  co  m
    authorQuery.setBoost(2.0f);

    Terms terms = reader.getTermVector(id, "subject"); // #4

    BooleanQuery subjectQuery = new BooleanQuery(); // #4
    TermsEnum termsEnum = terms.iterator(null);
    BytesRef text;
    while ((text = termsEnum.next()) != null) { // #4
        TermQuery tq = new TermQuery( // #4
                new Term("subject", text.utf8ToString())); // #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.mathworks.xzheng.advsearching.SortingExample.java

License:Apache License

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

    QueryParser parser = new QueryParser(Version.LUCENE_46, // #1
            "contents", // #1
            new StandardAnalyzer( // #1
                    Version.LUCENE_46)); // #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,//  www . j  a va  2  s .c o m
            new Sort(new SortField[] { SortField.FIELD_SCORE, new SortField("category", SortField.STRING) }));
    directory.close();
}