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

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

Introduction

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

Prototype

public BoostQuery(Query query, float boost) 

Source Link

Document

Sole constructor: wrap query in such a way that the produced scores will be boosted by boost .

Usage

From source file:alix.lucene.MoreLikeThis.java

License:Apache License

/**
 * Create the More like query from a PriorityQueue
 *///from   ww w  .  java  2s  .  c o  m
private Query createQuery(PriorityQueue<ScoreTerm> q) {
    BooleanQuery.Builder query = new BooleanQuery.Builder();
    ScoreTerm scoreTerm;
    float bestScore = -1;

    while ((scoreTerm = q.pop()) != null) {
        Query tq = new TermQuery(new Term(scoreTerm.topField, scoreTerm.word));

        if (boost) {
            if (bestScore == -1) {
                bestScore = (scoreTerm.score);
            }
            float myScore = (scoreTerm.score);
            tq = new BoostQuery(tq, boostFactor * myScore / bestScore);
        }

        try {
            query.add(tq, BooleanClause.Occur.SHOULD);
        } catch (BooleanQuery.TooManyClauses ignore) {
            break;
        }
    }
    return query.build();
}

From source file:com.github.healthonnet.search.SynonymExpandingExtendedDismaxQParserPlugin.java

License:Apache License

/**
 * Find the main query and its surrounding clause, make it SHOULD instead of MUST and append a bunch of other SHOULDs to it, then wrap it in a MUST E.g. +(text:dog) becomes +((text:dog)^1.5 ((text:hound) (text:pooch))^1.2)
 * //from   w w  w.j  a va 2  s.c om
 * @param query
 * @param synonymQueries
 * @param originalBoost
 * @param synonymBoost
 */
private Query applySynonymQueries(Query query, List<Query> synonymQueries, float originalBoost,
        float synonymBoost) {
    if (query instanceof BoostedQuery) {
        return applySynonymQueries(((BoostedQuery) query).getQuery(), synonymQueries, originalBoost,
                synonymBoost);
    } else if (query instanceof BooleanQuery) {
        BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder();
        for (BooleanClause booleanClause : ((BooleanQuery) query).clauses()) {
            if (Occur.MUST == booleanClause.getOccur()) {
                BooleanQuery.Builder combinedQueryBuilder = new BooleanQuery.Builder();
                combinedQueryBuilder.add(new BoostQuery(booleanClause.getQuery(), originalBoost), Occur.SHOULD);
                // standard 'must occur' clause - i.e. the main user query

                for (Query synonymQuery : synonymQueries) {
                    if (synonymQuery != null) {
                        BooleanQuery.Builder booleanSynonymQueryBuilder = new BooleanQuery.Builder();
                        booleanSynonymQueryBuilder.add(new BoostQuery(synonymQuery, synonymBoost),
                                Occur.SHOULD);
                        combinedQueryBuilder.add(booleanSynonymQueryBuilder.build(), Occur.SHOULD);
                    }
                }
                booleanQueryBuilder.add(combinedQueryBuilder.build(), Occur.MUST);
            } else {
                booleanQueryBuilder.add(booleanClause);
            }
        }
        query = booleanQueryBuilder.build();
        queryToHighlight = query;
    }
    return query;
}

From source file:com.o19s.es.ltr.logging.LoggingFetchSubPhaseTests.java

License:Apache License

public void testBogusQuery() throws IOException {
    PrebuiltFeatureSet set = new PrebuiltFeatureSet("test",
            singletonList(new PrebuiltFeature("test", new BoostQuery(new MatchAllDocsQuery(), Float.NaN))));
    LoggingFetchSubPhase.HitLogConsumer logger1 = new LoggingFetchSubPhase.HitLogConsumer("logger1", set, true);
    RankerQuery q = RankerQuery//ww  w. j a  va2 s . co  m
            .build(new PrebuiltLtrModel("test", LtrTestUtils.buildRandomRanker(set.size()), set));
    Query lq = q.toLoggerQuery(logger1, true);
    LoggingFetchSubPhase subPhase = new LoggingFetchSubPhase();
    SearchHit[] hits = selectRandomHits();
    expectThrows(LtrLoggingException.class, () -> subPhase.doLog(lq, singletonList(logger1), searcher, hits));
}

From source file:com.qwazr.search.query.SpanPositionsQuery.java

License:Apache License

@Override
final public Query getQuery(QueryContext queryContext) throws IOException {

    BooleanQuery.Builder builder = new BooleanQuery.Builder();
    TokenStream tokenStream = queryContext.analyzer.tokenStream(field, queryContext.queryString);
    try {/*from  www.ja  v a2  s.c  o m*/
        CharTermAttribute charTermAttribute = tokenStream.getAttribute(CharTermAttribute.class);
        PositionIncrementAttribute pocincrAttribute = tokenStream
                .getAttribute(PositionIncrementAttribute.class);
        tokenStream.reset();
        int pos = 0;
        while (tokenStream.incrementToken()) {
            final String charTerm = charTermAttribute.toString();
            int start = pos - distance;
            if (start < 0)
                start = 0;
            final int end = pos + distance + 1;
            for (int i = start; i < end; i++) {
                final float dist = Math.abs(i - pos) + 1;
                final float boost = 1 / dist;
                final SpanTermQuery spanTermQuery = new SpanTermQuery(new Term(field, charTerm));
                Query query = new BoostQuery(new SpanPositionRangeQuery(spanTermQuery, i, i + 1), boost);
                builder.add(new BooleanClause(query, BooleanClause.Occur.SHOULD));
            }
            pos += pocincrAttribute.getPositionIncrement();
        }
        return builder.build();
    } finally {
        IOUtils.closeQuietly(tokenStream);
    }
}

From source file:com.rapidminer.search.GlobalSearchHandler.java

License:Open Source License

/**
 * Builds the individual sub queries based on the given fields that should be searched.
 *
 * @param searchString// w  w w. j  a v  a 2s .  com
 *       the search term
 * @param fieldSet
 *       the collection of fields that should be searched
 * @param simpleMode
 *       if {@code true}, will boost the query for the name field and additional fields according to their weight;{@code false} will not boost any query.
 * @throws ParseException
 *       if the search string cannot be parsed
 */
private List<Query> buildSubQueries(final String searchString,
        final Collection<GlobalSearchDefaultField> fieldSet, final boolean simpleMode) throws ParseException {
    // create queries for each field. Always at least the NAME_FIELD
    QueryParser parser;
    List<Query> queries = new ArrayList<>(fieldSet.size());
    for (GlobalSearchDefaultField field : fieldSet) {
        String name = field.getName();

        parser = new QueryParser(name, GlobalSearchUtilities.ANALYZER);
        parser.setDateResolution(DateTools.Resolution.DAY);
        parser.setAllowLeadingWildcard(true);
        parser.setDefaultOperator(QueryParser.Operator.AND);

        Query parsedQuery = parser.parse(searchString);
        Query query;
        // in simple mode, boost search for default name field. Set lower boost to additional fields
        if (simpleMode) {
            float boost;
            if (GlobalSearchUtilities.FIELD_NAME.equals(name)) {
                boost = GlobalSearchUtilities.DEFAULT_NAME_FIELD_BOOST;
            } else {
                boost = field.getBoost();
            }
            query = new BoostQuery(parsedQuery, boost);
        } else {
            query = parsedQuery;
        }

        queries.add(query);
    }

    return queries;
}

From source file:indexer.Retriever.java

public void startRetriever() throws IOException, ParseException {
    try (IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(index)))) {
        IndexSearcher searcher = new IndexSearcher(reader);

        BufferedReader in = Files.newBufferedReader(Paths.get(queries), StandardCharsets.UTF_8);

        String line = in.readLine().trim();
        line = normalizeSearchQuery(line);

        QueryParser parser = new QueryParser(documentField, new CustomAnalyzer());
        Query debugQuery = parser.parse(line);
        System.out.println("Searching for: " + debugQuery.toString(documentField));

        Builder booleanQueryBuilder = new BooleanQuery.Builder();
        Query query1 = new TermQuery(new Term(abstractField, debugQuery.toString(documentField)));
        Query query2 = new TermQuery(new Term(contentsField, debugQuery.toString(documentField)));
        query1 = new BoostQuery(query1, 3);
        booleanQueryBuilder.add(query1, BooleanClause.Occur.SHOULD);
        booleanQueryBuilder.add(query2, BooleanClause.Occur.SHOULD);
        BooleanQuery booleanQuery = booleanQueryBuilder.build();

        TopDocs results = search(reader, searcher, booleanQuery);

        calculateIFIDF(reader, searcher, debugQuery.toString(documentField), results);

    } catch (IOException e) {
        System.out.println("Exception opening directory: " + e.getMessage());
    }/*from   w  w w . jav  a  2  s .c om*/
}

From source file:io.vertigo.dynamo.plugins.collections.lucene.RamLuceneQueryFactory.java

License:Apache License

private static Query createKeywordQuery(final Analyzer queryAnalyser, final String keywords,
        final Collection<DtField> searchedFieldList, final Optional<DtField> boostedField) throws IOException {
    if (StringUtil.isEmpty(keywords)) {
        return new MatchAllDocsQuery();
    }//w w w  .  j av a2 s.co m
    //-----
    final Builder queryBuilder = new BooleanQuery.Builder();
    for (final DtField dtField : searchedFieldList) {
        Query queryWord = createParsedKeywordsQuery(queryAnalyser, dtField.getName(), keywords);
        if (boostedField.isPresent() && dtField.equals(boostedField.get())) {
            queryWord = new BoostQuery(queryWord, 4);
        }
        queryBuilder.add(queryWord, BooleanClause.Occur.SHOULD);
    }
    return queryBuilder.build();
}

From source file:org.apache.solr.query.FilterQuery.java

License:Apache License

@Override
public Weight createWeight(IndexSearcher searcher, boolean needScores, float boost) throws IOException {
    // SolrRequestInfo reqInfo = SolrRequestInfo.getRequestInfo();

    if (!(searcher instanceof SolrIndexSearcher)) {
        // delete-by-query won't have SolrIndexSearcher
        return new BoostQuery(new ConstantScoreQuery(q), 0).createWeight(searcher, needScores, 1f);
    }//from   w w  w .  j  ava  2  s  . c  om

    SolrIndexSearcher solrSearcher = (SolrIndexSearcher) searcher;
    DocSet docs = solrSearcher.getDocSet(q);
    // reqInfo.addCloseHook(docs);  // needed for off-heap refcounting

    return new BoostQuery(new SolrConstantScoreQuery(docs.getTopFilter()), 0).createWeight(searcher, needScores,
            1f);
}

From source file:org.apache.solr.search.QueryWrapperFilter.java

License:Apache License

@Override
public Query rewrite(IndexReader reader) throws IOException {
    return new BoostQuery(new ConstantScoreQuery(query), 0f);
}

From source file:org.codelibs.elasticsearch.common.lucene.search.XMoreLikeThis.java

License:Apache License

/**
 * Add to an existing boolean query the More Like This query from this PriorityQueue
 *//*from   w  w  w  . j  a va2 s .  c o  m*/
private void addToQuery(PriorityQueue<ScoreTerm> q, BooleanQuery.Builder query) {
    ScoreTerm scoreTerm;
    float bestScore = -1;

    while ((scoreTerm = q.pop()) != null) {
        Query tq = new TermQuery(new Term(scoreTerm.topField, scoreTerm.word));

        if (boost) {
            if (bestScore == -1) {
                bestScore = (scoreTerm.score);
            }
            float myScore = (scoreTerm.score);
            tq = new BoostQuery(tq, boostFactor * myScore / bestScore);
        }

        try {
            query.add(tq, BooleanClause.Occur.SHOULD);
        } catch (BooleanQuery.TooManyClauses ignore) {
            break;
        }
    }
}