List of usage examples for org.apache.lucene.search BoostQuery BoostQuery
public BoostQuery(Query query, float boost)
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; } } }