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:de.blizzy.documentr.search.GetVisibleBranchDocIdsTask.java

License:Open Source License

@Override
public BitSet call() throws IOException {
    List<String> branches = Lists
            .newArrayList(permissionEvaluator.getBranchesForPermission(authentication, Permission.VIEW));
    if (!branches.isEmpty()) {
        Collections.sort(branches);
        BooleanQuery allBranchesQuery = new BooleanQuery();
        for (String projectAndBranch : branches) {
            String projectName = StringUtils.substringBefore(projectAndBranch, "/"); //$NON-NLS-1$
            String branchName = StringUtils.substringAfter(projectAndBranch, "/"); //$NON-NLS-1$
            TermQuery projectQuery = new TermQuery(new Term(PageIndex.PROJECT, projectName));
            TermQuery branchQuery = new TermQuery(new Term(PageIndex.BRANCH, branchName));
            BooleanQuery projectAndBranchQuery = new BooleanQuery();
            projectAndBranchQuery.add(projectQuery, BooleanClause.Occur.MUST);
            projectAndBranchQuery.add(branchQuery, BooleanClause.Occur.MUST);
            allBranchesQuery.add(projectAndBranchQuery, BooleanClause.Occur.SHOULD);
        }/* w w w .j a  v  a  2s .  c om*/
        AbstractDocIdsCollector collector = new AllDocIdsCollector();
        searcher.search(allBranchesQuery, collector);
        return collector.getDocIds();
    } else {
        return new BitSet(1);
    }
}

From source file:de.blizzy.documentr.search.GetVisibleBranchDocIdsTaskTest.java

License:Open Source License

@Test
public void call() throws IOException {
    List<String> branches = Lists.newArrayList("project1/branch1", "project1/branch2", "project2/branch"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
    when(permissionEvaluator.getBranchesForPermission(authentication, Permission.VIEW))
            .thenReturn(Sets.newHashSet(branches));

    BooleanQuery query = new BooleanQuery();
    for (String projectAndBranch : branches) {
        BooleanQuery q = new BooleanQuery();
        String projectName = StringUtils.substringBefore(projectAndBranch, "/"); //$NON-NLS-1$
        String branchName = StringUtils.substringAfter(projectAndBranch, "/"); //$NON-NLS-1$
        q.add(new TermQuery(new Term(PageIndex.PROJECT, projectName)), BooleanClause.Occur.MUST);
        q.add(new TermQuery(new Term(PageIndex.BRANCH, branchName)), BooleanClause.Occur.MUST);
        query.add(q, BooleanClause.Occur.SHOULD);
    }/*w  w  w  .j  a va2  s.  c  o m*/

    task.call();

    verify(searcher).search(eq(query), Matchers.any(AllDocIdsCollector.class));
}

From source file:de.blizzy.documentr.search.ParseQueryTaskTest.java

License:Open Source License

@Test
public void call() throws ParseException {
    ParseQueryTask task = new ParseQueryTask("+foo -bar", analyzer); //$NON-NLS-1$
    Query result = task.call();/*from ww w. ja v  a  2  s.c  o  m*/

    BooleanQuery query = new BooleanQuery();
    query.add(new TermQuery(new Term(PageIndex.ALL_TEXT, "foo")), BooleanClause.Occur.MUST); //$NON-NLS-1$
    query.add(new TermQuery(new Term(PageIndex.ALL_TEXT, "bar")), BooleanClause.Occur.MUST_NOT); //$NON-NLS-1$
    assertEquals(query, result);
}

From source file:de.citec.lucene.SearchIndex.java

public Map<String, List<String>> runStrictSearch(List<String> terms, int top_k, boolean onlypersons)
        throws IOException {
    Set<String> cache = new HashSet<>();
    Map<String, List<String>> wikipedia_entries = new HashMap();
    try {//w  ww . ja v a  2 s.  c  o  m

        //Generate Boolean query out of term
        BooleanQuery booleanQuery = new BooleanQuery();

        for (String term : terms) {
            booleanQuery.add(
                    new QueryParser("text", analyzer).parse("\"" + term.toLowerCase().replace(" ", "_") + "\""),
                    BooleanClause.Occur.SHOULD);
        }
        if (onlypersons) {
            booleanQuery.add(new QueryParser("persons", analyzer).parse("1"), BooleanClause.Occur.MUST);
            wikipedia_entries.putAll(runSearch(top_k, booleanQuery));
        } else {
            wikipedia_entries.putAll(runSearch(top_k, booleanQuery));
            booleanQuery.add(new QueryParser("persons", analyzer).parse("1"), BooleanClause.Occur.MUST);
            wikipedia_entries.putAll(runSearch(top_k, booleanQuery));
        }

    } catch (Exception e) {

    }

    return wikipedia_entries;
}

From source file:de.cosmocode.lucene.DirectApiLuceneQuery.java

License:Apache License

public DirectApiLuceneQuery(String defaultField, Analyzer analyzer) {
    this.defaultField = defaultField;
    this.analyzer = analyzer;
    this.topQuery = new BooleanQuery();
    this.currentField = defaultField;
}

From source file:de.cosmocode.lucene.DirectApiLuceneQuery.java

License:Apache License

private Query createMultiQuery(Iterable<?> values, QueryModifier modifier) {
    final BooleanQuery multiQuery = new BooleanQuery();
    final QueryModifier valueModifier = modifier.getMultiValueModifier();
    final Occur occur = TermModifierToOccur.INSTANCE.apply(valueModifier.getTermModifier());

    for (Object value : values) {
        if (value != null) {
            multiQuery.add(createQuery(value, valueModifier), occur);
        }/*from  ww w . j  a  va2 s .co  m*/
    }

    return multiQuery;
}

From source file:de.cosmocode.lucene.DirectApiLuceneQuery.java

License:Apache License

private Query createMultiQueryFromArray(Object values, QueryModifier modifier) {
    final BooleanQuery multiQuery = new BooleanQuery();
    final QueryModifier valueModifier = modifier.getMultiValueModifier();
    final Occur occur = TermModifierToOccur.INSTANCE.apply(valueModifier.getTermModifier());
    final int arrayLength = Array.getLength(values);

    // add all items
    for (int i = 0; i < arrayLength; i++) {
        final Object value = Array.get(values, i);
        if (value != null) {
            multiQuery.add(createQuery(value, valueModifier), occur);
        }//from w w  w .j a  v a  2  s .  co m
    }

    return multiQuery;
}

From source file:de.csw.linkgenerator.plugin.lucene.LucenePlugin.java

License:Open Source License

/**
 * @param query//from w  w w . jav  a 2s . c om
 * @param virtualWikiNames comma separated list of virtual wiki names
 * @param languages comma separated list of language codes to search in, may be null to search
 *            all languages
 */
private Query buildQuery(String query, String virtualWikiNames, String languages)
        throws org.apache.lucene.queryparser.classic.ParseException {
    // build a query like this: <user query string> AND <wikiNamesQuery> AND
    // <languageQuery>
    BooleanQuery bQuery = new BooleanQuery();
    Query parsedQuery = null;

    // for object search
    if (query.startsWith("PROP ")) {
        String property = query.substring(0, query.indexOf(":"));
        query = query.substring(query.indexOf(":") + 1, query.length());
        QueryParser qp = new QueryParser(Version.LUCENE_40, property, analyzer);
        parsedQuery = qp.parse(query);
        bQuery.add(parsedQuery, BooleanClause.Occur.MUST);
    } else if (query.startsWith("MULTI ")) {
        // for fulltext search
        List<String> fieldList = IndexUpdater.fields;
        String[] fields = fieldList.toArray(new String[fieldList.size()]);
        BooleanClause.Occur[] flags = new BooleanClause.Occur[fields.length];
        for (int i = 0; i < flags.length; i++) {
            flags[i] = BooleanClause.Occur.SHOULD;
        }
        parsedQuery = MultiFieldQueryParser.parse(Version.LUCENE_40, query, fields, flags, analyzer);
        bQuery.add(parsedQuery, BooleanClause.Occur.MUST);
    } else {
        QueryParser qp = new QueryParser(Version.LUCENE_40, "ft", analyzer);
        parsedQuery = qp.parse(query);
        bQuery.add(parsedQuery, BooleanClause.Occur.MUST);
    }

    if (virtualWikiNames != null && virtualWikiNames.length() > 0) {
        bQuery.add(buildOredTermQuery(virtualWikiNames, IndexFields.DOCUMENT_WIKI), BooleanClause.Occur.MUST);
    }
    if (languages != null && languages.length() > 0) {
        bQuery.add(buildOredTermQuery(languages, IndexFields.DOCUMENT_LANGUAGE), BooleanClause.Occur.SHOULD);
    }

    return bQuery;
}

From source file:de.faustedition.document.Document.java

License:Open Source License

public static Iterable<Document> find(GraphDatabaseService db, String id) {

    // query by idno
    final BooleanQuery idQuery = new BooleanQuery();
    idQuery.add(new WildcardQuery(new Term(ALL_IDNOS_KEY, id)), BooleanClause.Occur.SHOULD);
    idQuery.add(new WildcardQuery(new Term(WA_ID_KEY, id)), BooleanClause.Occur.SHOULD);
    idQuery.add(new WildcardQuery(new Term(URI_PART_KEY, id)), BooleanClause.Occur.SHOULD);
    IndexHits<Node> idResults = db.index().forNodes(INDEX_ID).query(idQuery);

    return Iterables.transform(idResults, newWrapperFunction(Document.class));
}

From source file:de.faustedition.genesis.lines.VerseManager.java

License:Open Source License

public Iterable<GraphVerseInterval> forInterval(VerseInterval verseInterval) {

    // find all intervals for which start < verseInterval.getEnd() and end > verseInterval.getStart()
    Index<Node> verseIndex = faustGraph.getDb().index().forNodes(INDEX_VERSE_INTERVAL);
    BooleanQuery andQuery = new BooleanQuery();
    NumericRangeQuery<Integer> startQuery = NumericRangeQuery.newIntRange("start", 0, verseInterval.getEnd(),
            true, true);/* ww w  . ja v  a2 s  . co  m*/
    NumericRangeQuery<Integer> endQuery = NumericRangeQuery.newIntRange("end", verseInterval.getStart(),
            Integer.MAX_VALUE, true, true);
    andQuery.add(startQuery, BooleanClause.Occur.MUST);
    andQuery.add(endQuery, BooleanClause.Occur.MUST);
    IndexHits<Node> resultNodes = verseIndex.query(andQuery);
    Function<Node, GraphVerseInterval> verseIntervalForNode = new Function<Node, GraphVerseInterval>() {
        @Override
        public GraphVerseInterval apply(@Nullable Node input) {
            return new GraphVerseInterval(input);
        }
    };
    return Iterables.transform(resultNodes, verseIntervalForNode);
}