Take a look at BooleanQuery and the setBoost() call on Query, and
BooleanClause.Occur for the MUST/SHOULD logic.

Something along the lines of this pseudo code

BooleanQuery bq = new BooleanQuery();

Query titleq = xxx;
titleq.setBoost(somevalue)
bq.add(titleq, must|should)

Query addressq = yyy
addressq.setBoost(someothervalue)
bq.add(addressq, ...)

searcher.search(bq, ...)


You might be able to do the whole thing with the query parser but once
the logic gets more than trivial I always prefer to build the queries
in code.  You can use the parser to generate the titleq, addressq etc.
queries if that is appropriate.

You can nest BooleanQuery instances if you need that level of if
(this) but not (that or that) unless (whichever or whatever) except
when ().  Which you might.


--
Ian.



On Thu, Jun 6, 2013 at 7:05 AM, Abhishek Mallik
<abhishek.mallik...@gmail.com> wrote:
> I have indexed documents in Lucene based on three fields: *title*, *address*
> , *city*. Now I want to build my query say, *C A B *so that I can retrieve
> the documents as follows:
>
> *C* must be present in the *title* field of the documents and either *A* or
> *B* must be present in either of *address* and *city *fields of the matched
> documents. The documents that have A present in either of those fields
> should get higher score or higher boost. Here *A*, *B*, *C* may be single
> terms or phrases.
>
> I am new to Lucene. I do not have any experience of framing such complex
> queries. So if anyone please help me to solve this I will be really
> grateful. Thank you.
>
>
> -Abhishek

---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-user-h...@lucene.apache.org

Reply via email to