Hi Steve,

Thanks for the clarification! Now I understand what this function is for.
(I tried "term1-term2" and indeed it's parsed into a phrase query)

I was trying to save typing the quotation marks as most of my use cases are
phrase search. Seems this can't be done for now :)

Best,
Gang

On Mon, Dec 5, 2016 at 9:06 AM Steve Rowe <sar...@gmail.com> wrote:

> Hi Gang,
>
> The javadoc explanation isn’t very clear, but the process is:
>
> 1. Split query on whitespace (‘term1 term2’ is split into ‘term1’ and
> ‘term2’)
> 2. For each split term: if autoGeneratePhraseQueries=true, and analysis
> produces more than one term, for example a synonym ’term1’->’multiple word
> synonym’, then a phrase query will be created.
>
> In the example you give, after splitting and analysis, there is only one
> term, so phrase queries will not be produced.
>
> A workaround: insert quotation marks at the start and end of the query.
>
> --
> Steve
> www.lucidworks.com
>
> > On Dec 4, 2016, at 4:39 PM, Gang Li <leemag...@gmail.com> wrote:
> >
> > Hi everyone,
> >
> > I'm trying to make the QueryParser parse a raw query without quotes into
> a
> > phrase query by default, and according to Lucene doc it seems I can use
> the
> > method setAutoGeneratePhraseQueries(). (
> >
> http://lucene.apache.org/core/6_2_0/queryparser/org/apache/lucene/queryparser/classic/QueryParserBase.html#setAutoGeneratePhraseQueries-boolean-
> > )
> >
> > But after I call parser.setAutoGeneratePhraseQueries(True), the parser
> > still doesn't produce a phrase query. Please see the code example below.
> >
> > I'm using Ubuntu 16.04, Java 1.8, Pylucene (Lucene version 6.2.0). All
> the
> > tests are passed by running "make test" under pylucene folder.
> >
> > import lucene
> > from org.apache.lucene.analysis.standard import StandardAnalyzer
> > from org.apache.lucene.queryparser.classic import QueryParser
> > from org.apache.lucene.search import PhraseQuery
> > from org.apache.lucene.index import Term
> >
> >
> > jcc_env = lucene.initVM(vmargs=[str('-Djava.awt.headless=true')])
> >
> > # Parse raw query.
> >
> >
> > analyzer = StandardAnalyzer()
> > parser = QueryParser('field', analyzer)
> > # Auto generate phrase query over multiple terms.
> >
> >
> > parser.setAutoGeneratePhraseQueries(True)
> >
> > # This prints field:term1 field:term2, but it should be field:"term1
> term2"
> >
> >
> > print parser.parse('term1 term2')
> >
> > # Build a phrase query.
> >
> >
> > builder = PhraseQuery.Builder()
> > builder.add(Term('field', 'term1'))
> > builder.add(Term('field', 'term2'))
> >
> > # This prints field:"term1 term2", which is correct.
> > print builder.build()
> >
> > Does anyone know how to make it work? Thank you!
> >
> > Gang
>
>

Reply via email to