List of usage examples for org.apache.lucene.search PhraseQuery getSlop
public int getSlop()
From source file:com.jaeksoft.searchlib.snippet.SnippetQueries.java
License:Open Source License
private final void parse(final PhraseQuery query) { Term[] terms = query.getTerms();//from w w w . j a va2 s . c o m if (terms == null) return; List<Integer> termPosSequence = new ArrayList<Integer>(terms.length); for (Term term : terms) { if (!field.equals(term.field())) continue; int pos = checkTerm(term.text()); termPosSequence.add(pos); termPhraseSet.add(pos); } // Term sequences with one term are not phrase queries if (termPosSequence.size() <= 1) return; termSequenceList.add(new TermSequence(termPosSequence, query.getSlop())); }
From source file:com.o19s.solr.swan.highlight.SpanAwareFieldQuery.java
License:Apache License
private void checkOverlap(Collection<Query> expandQueries, PhraseQuery a, PhraseQuery b) { if (a.getSlop() != b.getSlop()) return;/*from w w w .j ava 2 s . c om*/ Term[] ats = a.getTerms(); Term[] bts = b.getTerms(); if (fieldMatch && !ats[0].field().equals(bts[0].field())) return; checkOverlap(expandQueries, ats, bts, a.getSlop(), a.getBoost()); checkOverlap(expandQueries, bts, ats, b.getSlop(), b.getBoost()); }
From source file:com.stratio.cassandra.index.query.PhraseConditionTest.java
License:Apache License
@Test public void testPhraseQuery() { Map<String, ColumnMapper<?>> map = new HashMap<>(); map.put("name", new ColumnMapperBoolean()); Schema mappers = new Schema(EnglishAnalyzer.class.getName(), map); List<String> values = new ArrayList<>(); values.add("hola"); values.add("adios"); PhraseCondition phraseCondition = new PhraseCondition(0.5f, "name", values, 2); Query query = phraseCondition.query(mappers); Assert.assertNotNull(query);/* w ww .jav a 2 s . co m*/ Assert.assertEquals(org.apache.lucene.search.PhraseQuery.class, query.getClass()); org.apache.lucene.search.PhraseQuery luceneQuery = (org.apache.lucene.search.PhraseQuery) query; Assert.assertEquals(values.size(), luceneQuery.getTerms().length); Assert.assertEquals(2, luceneQuery.getSlop()); Assert.assertEquals(0.5f, query.getBoost(), 0); }
From source file:com.stratio.cassandra.lucene.search.condition.PhraseConditionTest.java
License:Apache License
@Test public void testPhraseQuery() { Schema schema = mockSchema("name", new TextMapper("name", true, true, "spanish"), "spanish"); String value = "hola adios the a"; PhraseCondition condition = new PhraseCondition(0.5f, "name", value, 2); Query query = condition.query(schema); assertNotNull(query);/*from w w w . j a v a 2 s .c o m*/ assertEquals(PhraseQuery.class, query.getClass()); PhraseQuery luceneQuery = (PhraseQuery) query; assertEquals(3, luceneQuery.getTerms().length); assertEquals(2, luceneQuery.getSlop()); assertEquals(0.5f, query.getBoost(), 0); }
From source file:edu.mit.ll.vizlinc.highlight.WeightedSpanTermExtractor.java
License:Apache License
/** * Fills a <code>Map</code> with <@link WeightedSpanTerm>s using the terms from the supplied <code>Query</code>. * /*from w w w.j ava 2 s . co m*/ * @param query * Query to extract Terms from * @param terms * Map to place created WeightedSpanTerms in * @throws IOException */ private void extract(Query query, Map<String, WeightedSpanTerm> terms) throws IOException { if (query instanceof BooleanQuery) { BooleanClause[] queryClauses = ((BooleanQuery) query).getClauses(); for (int i = 0; i < queryClauses.length; i++) { if (!queryClauses[i].isProhibited()) { extract(queryClauses[i].getQuery(), terms); } } } else if (query instanceof PhraseQuery) { PhraseQuery phraseQuery = ((PhraseQuery) query); Term[] phraseQueryTerms = phraseQuery.getTerms(); SpanQuery[] clauses = new SpanQuery[phraseQueryTerms.length]; for (int i = 0; i < phraseQueryTerms.length; i++) { clauses[i] = new SpanTermQuery(phraseQueryTerms[i]); } int slop = phraseQuery.getSlop(); int[] positions = phraseQuery.getPositions(); // add largest position increment to slop if (positions.length > 0) { int lastPos = positions[0]; int largestInc = 0; int sz = positions.length; for (int i = 1; i < sz; i++) { int pos = positions[i]; int inc = pos - lastPos; if (inc > largestInc) { largestInc = inc; } lastPos = pos; } if (largestInc > 1) { slop += largestInc; } } boolean inorder = false; if (slop == 0) { inorder = true; } SpanNearQuery sp = new SpanNearQuery(clauses, slop, inorder); sp.setBoost(query.getBoost()); extractWeightedSpanTerms(terms, sp); } else if (query instanceof TermQuery) { extractWeightedTerms(terms, query); } else if (query instanceof SpanQuery) { extractWeightedSpanTerms(terms, (SpanQuery) query); } else if (query instanceof FilteredQuery) { extract(((FilteredQuery) query).getQuery(), terms); } else if (query instanceof DisjunctionMaxQuery) { for (Iterator<Query> iterator = ((DisjunctionMaxQuery) query).iterator(); iterator.hasNext();) { extract(iterator.next(), terms); } } else if (query instanceof MultiTermQuery && expandMultiTermQuery) { MultiTermQuery mtq = ((MultiTermQuery) query); if (mtq.getRewriteMethod() != MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE) { mtq = (MultiTermQuery) mtq.clone(); mtq.setRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE); query = mtq; } FakeReader fReader = new FakeReader(); MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE.rewrite(fReader, mtq); if (fReader.field != null) { IndexReader ir = getReaderForField(fReader.field); extract(query.rewrite(ir), terms); } } else if (query instanceof MultiPhraseQuery) { final MultiPhraseQuery mpq = (MultiPhraseQuery) query; final List<Term[]> termArrays = mpq.getTermArrays(); final int[] positions = mpq.getPositions(); if (positions.length > 0) { int maxPosition = positions[positions.length - 1]; for (int i = 0; i < positions.length - 1; ++i) { if (positions[i] > maxPosition) { maxPosition = positions[i]; } } @SuppressWarnings("unchecked") final List<SpanQuery>[] disjunctLists = new List[maxPosition + 1]; int distinctPositions = 0; for (int i = 0; i < termArrays.size(); ++i) { final Term[] termArray = termArrays.get(i); List<SpanQuery> disjuncts = disjunctLists[positions[i]]; if (disjuncts == null) { disjuncts = (disjunctLists[positions[i]] = new ArrayList<SpanQuery>(termArray.length)); ++distinctPositions; } for (int j = 0; j < termArray.length; ++j) { disjuncts.add(new SpanTermQuery(termArray[j])); } } int positionGaps = 0; int position = 0; final SpanQuery[] clauses = new SpanQuery[distinctPositions]; for (int i = 0; i < disjunctLists.length; ++i) { List<SpanQuery> disjuncts = disjunctLists[i]; if (disjuncts != null) { clauses[position++] = new SpanOrQuery(disjuncts.toArray(new SpanQuery[disjuncts.size()])); } else { ++positionGaps; } } final int slop = mpq.getSlop(); final boolean inorder = (slop == 0); SpanNearQuery sp = new SpanNearQuery(clauses, slop + positionGaps, inorder); sp.setBoost(query.getBoost()); extractWeightedSpanTerms(terms, sp); } } }
From source file:it.unibz.instasearch.indexing.querying.LowercaseConverter.java
License:Open Source License
@Override public Query visit(PhraseQuery phraseQuery) { PhraseQuery newQuery = new PhraseQuery(); for (Term term : phraseQuery.getTerms()) { Field field = Field.getByName(term.field()); if (field != Field.CONTENTS) return phraseQuery; Term newTerm = Field.CONTENTS.createTerm(term.text().toLowerCase()); newQuery.add(newTerm);/*from w w w. j av a 2 s .c o m*/ } newQuery.setSlop(phraseQuery.getSlop()); newQuery.setBoost(phraseQuery.getBoost()); return newQuery; }
From source file:org.apache.blur.utils.HighlightHelper.java
License:Apache License
private static Query setFieldIfNeeded(Query query, String name, String fieldLessFieldName) { if (name == null) { return query; }// w w w . j a v a 2s. c o m if (query instanceof TermQuery) { TermQuery tq = (TermQuery) query; Term term = tq.getTerm(); if (term.field().equals(fieldLessFieldName)) { return new TermQuery(new Term(name, term.bytes())); } } else if (query instanceof WildcardQuery) { WildcardQuery wq = (WildcardQuery) query; Term term = wq.getTerm(); if (term.field().equals(fieldLessFieldName)) { return new WildcardQuery(new Term(name, term.bytes())); } } else if (query instanceof MultiPhraseQuery) { MultiPhraseQuery mpq = (MultiPhraseQuery) query; int[] positions = mpq.getPositions(); List<Term[]> termArrays = mpq.getTermArrays(); if (isTermField(termArrays, fieldLessFieldName)) { MultiPhraseQuery multiPhraseQuery = new MultiPhraseQuery(); multiPhraseQuery.setSlop(mpq.getSlop()); for (int i = 0; i < termArrays.size(); i++) { multiPhraseQuery.add(changeFields(termArrays.get(i), name), positions[i]); } return multiPhraseQuery; } } else if (query instanceof PhraseQuery) { PhraseQuery pq = (PhraseQuery) query; Term[] terms = pq.getTerms(); int[] positions = pq.getPositions(); String field = terms[0].field(); if (field.equals(BlurConstants.SUPER)) { PhraseQuery phraseQuery = new PhraseQuery(); for (int i = 0; i < terms.length; i++) { phraseQuery.add(new Term(name, terms[i].bytes()), positions[i]); } phraseQuery.setSlop(pq.getSlop()); return phraseQuery; } } else if (query instanceof PrefixQuery) { PrefixQuery pq = (PrefixQuery) query; Term term = pq.getPrefix(); if (term.field().equals(BlurConstants.SUPER)) { return new PrefixQuery(new Term(name, term.bytes())); } } else if (query instanceof TermRangeQuery) { TermRangeQuery trq = (TermRangeQuery) query; BytesRef lowerTerm = trq.getLowerTerm(); BytesRef upperTerm = trq.getUpperTerm(); boolean includeUpper = trq.includesUpper(); boolean includeLower = trq.includesLower(); String field = trq.getField(); if (field.equals(BlurConstants.SUPER)) { return new TermRangeQuery(name, lowerTerm, upperTerm, includeLower, includeUpper); } } return query; }
From source file:org.elasticsearch.action.debugquery.QueryToMapTransformer.java
License:Apache License
@Override public Map visit(PhraseQuery query) throws Exception { final Map map = newQuery(query); map.put("slop", query.getSlop()); final Term[] terms = query.getTerms(); final ArrayList termsLst = new ArrayList(terms.length); map.put("terms", termsLst); for (final Term term : terms) { final Map<String, Object> termMap = new LinkedHashMap<>(); termMap.put(getTermField(term), term.bytes().utf8ToString()); termsLst.add(termMap);/*from ww w . j a va 2 s . c om*/ } return map; }
From source file:org.elasticsearch.index.query.QueryStringQueryBuilderTests.java
License:Apache License
public void testToQueryPhraseQuery() throws IOException { assumeTrue("test runs only when at least a type is registered", getCurrentTypes().length > 0); Query query = queryStringQuery("\"term1 term2\"").defaultField(STRING_FIELD_NAME).phraseSlop(3) .toQuery(createShardContext()); assertThat(query, instanceOf(DisjunctionMaxQuery.class)); DisjunctionMaxQuery disjunctionMaxQuery = (DisjunctionMaxQuery) query; assertThat(disjunctionMaxQuery.getDisjuncts().size(), equalTo(1)); assertThat(disjunctionMaxQuery.getDisjuncts().get(0), instanceOf(PhraseQuery.class)); PhraseQuery phraseQuery = (PhraseQuery) disjunctionMaxQuery.getDisjuncts().get(0); assertThat(phraseQuery.getTerms().length, equalTo(2)); assertThat(phraseQuery.getTerms()[0], equalTo(new Term(STRING_FIELD_NAME, "term1"))); assertThat(phraseQuery.getTerms()[1], equalTo(new Term(STRING_FIELD_NAME, "term2"))); assertThat(phraseQuery.getSlop(), equalTo(3)); }
From source file:org.elasticsearch.index.query.QueryStringQueryBuilderTests.java
License:Apache License
public void testToQueryPhraseQueryBoostAndSlop() throws IOException { assumeTrue("test runs only when at least a type is registered", getCurrentTypes().length > 0); QueryStringQueryBuilder queryStringQueryBuilder = new QueryStringQueryBuilder("\"test phrase\"~2") .field(STRING_FIELD_NAME, 5f); Query query = queryStringQueryBuilder.toQuery(createShardContext()); assertThat(query, instanceOf(DisjunctionMaxQuery.class)); DisjunctionMaxQuery disjunctionMaxQuery = (DisjunctionMaxQuery) query; assertThat(disjunctionMaxQuery.getDisjuncts().size(), equalTo(1)); assertThat(disjunctionMaxQuery.getDisjuncts().get(0), instanceOf(BoostQuery.class)); BoostQuery boostQuery = (BoostQuery) disjunctionMaxQuery.getDisjuncts().get(0); assertThat(boostQuery.getBoost(), equalTo(5f)); assertThat(boostQuery.getQuery(), instanceOf(PhraseQuery.class)); PhraseQuery phraseQuery = (PhraseQuery) boostQuery.getQuery(); assertThat(phraseQuery.getSlop(), Matchers.equalTo(2)); assertThat(phraseQuery.getTerms().length, equalTo(2)); }