use of org.apache.lucene.search.MultiPhraseQuery in project lucene-solr by apache.
the class MultiFieldQueryParser method applySlop.
private Query applySlop(Query q, int slop) {
if (q instanceof PhraseQuery) {
PhraseQuery.Builder builder = new PhraseQuery.Builder();
builder.setSlop(slop);
PhraseQuery pq = (PhraseQuery) q;
org.apache.lucene.index.Term[] terms = pq.getTerms();
int[] positions = pq.getPositions();
for (int i = 0; i < terms.length; ++i) {
builder.add(terms[i], positions[i]);
}
q = builder.build();
} else if (q instanceof MultiPhraseQuery) {
MultiPhraseQuery mpq = (MultiPhraseQuery) q;
if (slop != mpq.getSlop()) {
q = new MultiPhraseQuery.Builder(mpq).setSlop(slop).build();
}
}
return q;
}
use of org.apache.lucene.search.MultiPhraseQuery in project lucene-solr by apache.
the class SynonymTokenizer method testHighlighterWithMultiPhraseQuery.
public void testHighlighterWithMultiPhraseQuery() throws IOException, InvalidTokenOffsetsException {
final String fieldName = "substring";
final MultiPhraseQuery mpq = new MultiPhraseQuery.Builder().add(new Term(fieldName, "uchu")).build();
assertHighlighting(mpq, new SimpleHTMLFormatter("<b>", "</b>"), "Buchung", "B<b>uchu</b>ng", fieldName);
}
use of org.apache.lucene.search.MultiPhraseQuery in project lucene-solr by apache.
the class SynonymTokenizer method testQueryScorerMultiPhraseQueryHighlightingWithGap.
public void testQueryScorerMultiPhraseQueryHighlightingWithGap() throws Exception {
MultiPhraseQuery.Builder mpqb = new MultiPhraseQuery.Builder();
/*
* The toString of MultiPhraseQuery doesn't work so well with these
* out-of-order additions, but the Query itself seems to match accurately.
*/
mpqb.add(new Term[] { new Term(FIELD_NAME, "wordz") }, 2);
mpqb.add(new Term[] { new Term(FIELD_NAME, "wordx") }, 0);
doSearching(mpqb.build());
final int maxNumFragmentsRequired = 1;
final int expectedHighlights = 2;
assertExpectedHighlightCount(maxNumFragmentsRequired, expectedHighlights);
}
use of org.apache.lucene.search.MultiPhraseQuery in project lucene-solr by apache.
the class SolrQueryParserBase method getFieldQuery.
/**
* Base implementation delegates to {@link #getFieldQuery(String,String,boolean,boolean)}.
* This method may be overridden, for example, to return
* a SpanNearQuery instead of a PhraseQuery.
*
*/
protected Query getFieldQuery(String field, String queryText, int slop) throws SyntaxError {
Query query = getFieldQuery(field, queryText, true, false);
// and not a sub-parser.
if (subQParser == null) {
if (query instanceof PhraseQuery) {
PhraseQuery pq = (PhraseQuery) query;
Term[] terms = pq.getTerms();
int[] positions = pq.getPositions();
PhraseQuery.Builder builder = new PhraseQuery.Builder();
for (int i = 0; i < terms.length; ++i) {
builder.add(terms[i], positions[i]);
}
builder.setSlop(slop);
query = builder.build();
} else if (query instanceof MultiPhraseQuery) {
MultiPhraseQuery mpq = (MultiPhraseQuery) query;
if (slop != mpq.getSlop()) {
query = new MultiPhraseQuery.Builder(mpq).setSlop(slop).build();
}
}
}
return query;
}
use of org.apache.lucene.search.MultiPhraseQuery in project lucene-solr by apache.
the class TestMultiPhraseQueryParsing method testMultiPhraseQueryParsing.
public void testMultiPhraseQueryParsing() throws Exception {
TokenAndPos[] INCR_0_QUERY_TOKENS_AND = new TokenAndPos[] { new TokenAndPos("a", 0), new TokenAndPos("1", 0), new TokenAndPos("b", 1), new TokenAndPos("1", 1), new TokenAndPos("c", 2) };
QueryParser qp = new QueryParser("field", new CannedAnalyzer(INCR_0_QUERY_TOKENS_AND));
Query q = qp.parse("\"this text is acually ignored\"");
assertTrue("wrong query type!", q instanceof MultiPhraseQuery);
MultiPhraseQuery.Builder multiPhraseQueryBuilder = new MultiPhraseQuery.Builder();
multiPhraseQueryBuilder.add(new Term[] { new Term("field", "a"), new Term("field", "1") }, -1);
multiPhraseQueryBuilder.add(new Term[] { new Term("field", "b"), new Term("field", "1") }, 0);
multiPhraseQueryBuilder.add(new Term[] { new Term("field", "c") }, 1);
assertEquals(multiPhraseQueryBuilder.build(), q);
}
Aggregations