Search in sources :

Example 16 with MultiPhraseQuery

use of org.apache.lucene.search.MultiPhraseQuery in project lucene-solr by apache.

the class TestQPHelper method testMultiPhraseQuery.

public void testMultiPhraseQuery() throws Exception {
    Directory dir = newDirectory();
    IndexWriter w = new IndexWriter(dir, newIndexWriterConfig(new CannedAnalyzer()));
    Document doc = new Document();
    doc.add(newTextField("field", "", Field.Store.NO));
    w.addDocument(doc);
    IndexReader r = DirectoryReader.open(w);
    IndexSearcher s = newSearcher(r);
    Query q = new StandardQueryParser(new CannedAnalyzer()).parse("\"a\"", "field");
    assertTrue(q instanceof MultiPhraseQuery);
    assertEquals(1, s.search(q, 10).totalHits);
    r.close();
    w.close();
    dir.close();
}
Also used : IndexSearcher(org.apache.lucene.search.IndexSearcher) Query(org.apache.lucene.search.Query) MatchNoDocsQuery(org.apache.lucene.search.MatchNoDocsQuery) PhraseQuery(org.apache.lucene.search.PhraseQuery) RegexpQuery(org.apache.lucene.search.RegexpQuery) MultiTermQuery(org.apache.lucene.search.MultiTermQuery) PrefixQuery(org.apache.lucene.search.PrefixQuery) FuzzyQuery(org.apache.lucene.search.FuzzyQuery) MatchAllDocsQuery(org.apache.lucene.search.MatchAllDocsQuery) WildcardQuery(org.apache.lucene.search.WildcardQuery) MultiPhraseQuery(org.apache.lucene.search.MultiPhraseQuery) TermQuery(org.apache.lucene.search.TermQuery) BooleanQuery(org.apache.lucene.search.BooleanQuery) BoostQuery(org.apache.lucene.search.BoostQuery) TermRangeQuery(org.apache.lucene.search.TermRangeQuery) IndexWriter(org.apache.lucene.index.IndexWriter) IndexReader(org.apache.lucene.index.IndexReader) MultiPhraseQuery(org.apache.lucene.search.MultiPhraseQuery) Document(org.apache.lucene.document.Document) Directory(org.apache.lucene.store.Directory)

Example 17 with MultiPhraseQuery

use of org.apache.lucene.search.MultiPhraseQuery in project greplin-lucene-utils by Cue.

the class PhrasePrefixQuery method rewrite.

@Override
public final Query rewrite(final IndexReader reader) throws IOException {
    Term[] prefixTerms = getPrefixTerms(this.terms.get(this.terms.size() - 1), reader);
    if (prefixTerms == null) {
        return new MatchNoDocsQuery();
    }
    MultiPhraseQuery query = new MultiPhraseQuery();
    for (int i = 0; i < this.terms.size() - 1; i++) {
        query.add(new Term(this.field, this.terms.get(i)));
    }
    query.add(prefixTerms);
    return query;
}
Also used : MultiPhraseQuery(org.apache.lucene.search.MultiPhraseQuery) Term(org.apache.lucene.index.Term)

Example 18 with MultiPhraseQuery

use of org.apache.lucene.search.MultiPhraseQuery in project zm-mailbox by Zimbra.

the class LuceneQueryOperation method expandLazyMultiPhraseQuery.

private Query expandLazyMultiPhraseQuery(Query query) throws IOException {
    if (query instanceof LazyMultiPhraseQuery) {
        LazyMultiPhraseQuery lazy = (LazyMultiPhraseQuery) query;
        int max = LC.zimbra_index_wildcard_max_terms_expanded.intValue();
        MultiPhraseQuery mquery = new MultiPhraseQuery();
        for (Term[] terms : lazy.getTermArrays()) {
            if (terms.length != 1) {
                mquery.add(terms);
                continue;
            }
            Term base = terms[0];
            if (!lazy.expand.contains(base)) {
                mquery.add(terms);
                continue;
            }
            List<Term> expanded = Lists.newArrayList();
            try (TermFieldEnumeration itr = searcher.getIndexReader().getTermsForField(base.field(), base.text())) {
                while (itr.hasMoreElements()) {
                    BrowseTerm term = itr.nextElement();
                    if (term != null && term.getText().startsWith(base.text())) {
                        if (expanded.size() >= max) {
                            // expanded
                            break;
                        }
                        expanded.add(new Term(base.field(), term.getText()));
                    } else {
                        break;
                    }
                }
            }
            if (expanded.isEmpty()) {
                return null;
            } else {
                mquery.add(expanded.toArray(new Term[expanded.size()]));
            }
        }
        return mquery;
    } else if (query instanceof BooleanQuery) {
        ListIterator<BooleanClause> itr = ((BooleanQuery) query).clauses().listIterator();
        while (itr.hasNext()) {
            BooleanClause clause = itr.next();
            Query result = expandLazyMultiPhraseQuery(clause.getQuery());
            if (result == null) {
                if (clause.isRequired()) {
                    return null;
                } else {
                    itr.remove();
                }
            } else if (result != clause.getQuery()) {
                clause.setQuery(result);
            }
        }
        return ((BooleanQuery) query).clauses().isEmpty() ? null : query;
    } else {
        return query;
    }
}
Also used : BooleanClause(org.apache.lucene.search.BooleanClause) BooleanQuery(org.apache.lucene.search.BooleanQuery) Query(org.apache.lucene.search.Query) MultiPhraseQuery(org.apache.lucene.search.MultiPhraseQuery) TermQuery(org.apache.lucene.search.TermQuery) BooleanQuery(org.apache.lucene.search.BooleanQuery) TermFieldEnumeration(com.zimbra.cs.index.ZimbraIndexReader.TermFieldEnumeration) MultiPhraseQuery(org.apache.lucene.search.MultiPhraseQuery) Term(org.apache.lucene.index.Term) ListIterator(java.util.ListIterator)

Aggregations

MultiPhraseQuery (org.apache.lucene.search.MultiPhraseQuery)18 Term (org.apache.lucene.index.Term)15 Query (org.apache.lucene.search.Query)8 PhraseQuery (org.apache.lucene.search.PhraseQuery)7 TermQuery (org.apache.lucene.search.TermQuery)7 BooleanQuery (org.apache.lucene.search.BooleanQuery)5 BoostQuery (org.apache.lucene.search.BoostQuery)5 ArrayList (java.util.ArrayList)4 ConstantScoreQuery (org.apache.lucene.search.ConstantScoreQuery)4 SpanTermQuery (org.apache.lucene.search.spans.SpanTermQuery)4 List (java.util.List)3 BooleanClause (org.apache.lucene.search.BooleanClause)3 MatchAllDocsQuery (org.apache.lucene.search.MatchAllDocsQuery)3 MultiTermQuery (org.apache.lucene.search.MultiTermQuery)3 SynonymQuery (org.apache.lucene.search.SynonymQuery)3 DocumentBuilder (javax.xml.parsers.DocumentBuilder)2 IndexReader (org.apache.lucene.index.IndexReader)2 BlendedTermQuery (org.apache.lucene.queries.BlendedTermQuery)2 BoostingQuery (org.apache.lucene.queries.BoostingQuery)2 QueryTreeBuilder (org.apache.lucene.queryparser.flexible.core.builders.QueryTreeBuilder)2