You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by Praveen Yarlagadda <pr...@gmail.com> on 2012/02/01 08:50:52 UTC
too many boolean clauses
Hi all,
I have been using lucene with Hibernate to index the data. Each document is
indexed with two fields: id and content. Each document corresponds to a
record in the database. In my usecase, search needs to work like this:
1. Fetch records from the database based on some criteria
2. Search for the keywords only in the records found above
I am preparing the search query like this: +(content: (hello world)) +(id:
(234 235 899 534 345 898))
If the number of documents (in the identifier field) reaches more than
1024, search fails with "too many boolean clauses". I can't use range query.
Is there any other way to prepare the search query? How do I search for
keywords in select documents?
If you have any suggestions, please let me know.
Thanks,
Praveen
RE: too many boolean clauses
Posted by Uwe Schindler <uw...@thetaphi.de>.
I would recommend to use TermsFilter (http://goo.gl/BC9eQ, possibly wrapped
by a ConstantScoreQuery). You must do the query building by hand, yuery
*parser* cannot do that:
TermsFilter tf = new TermsFilter(); // it is in lucene-queries.jar
tf.addTerm(new Term("id", val1));
tf.addTerm(new Term("id", val2));
tf.addTerm(new Term("id", val3));
tf.addTerm(new Term("id", val4));
// if you need a query and don't want to use a Filter:
Query wrappedQ = new ConstantScoreQuery(tf);
You can execute the Filter as addon to your already prepared query:
searcher.search(queryParser.parse("content: (hello world)"), filter,...);
Or you use the wrapped as ConstantScore and combine it with the query:
BooleanQuery bq = new BooleanQuery();
bq.add(queryParser.parse("content: (hello world)"),
BooleanClause.Occur.MUST);
bq.add(wrapped, BooleanClause.Occur.MUST);
searcher.search(bq,...);
Uwe
-----
Uwe Schindler
H.-H.-Meier-Allee 63, D-28213 Bremen
http://www.thetaphi.de
eMail: uwe@thetaphi.de
> -----Original Message-----
> From: Praveen Yarlagadda [mailto:praveen.yarlagadda@gmail.com]
> Sent: Wednesday, February 01, 2012 8:51 AM
> To: java-user@lucene.apache.org
> Subject: too many boolean clauses
>
> Hi all,
>
> I have been using lucene with Hibernate to index the data. Each document
is
> indexed with two fields: id and content. Each document corresponds to a
record
> in the database. In my usecase, search needs to work like this:
>
> 1. Fetch records from the database based on some criteria 2. Search for
the
> keywords only in the records found above
>
> I am preparing the search query like this: +(content: (hello world)) +(id:
> (234 235 899 534 345 898))
>
> If the number of documents (in the identifier field) reaches more than
1024,
> search fails with "too many boolean clauses". I can't use range query.
>
> Is there any other way to prepare the search query? How do I search for
> keywords in select documents?
>
> If you have any suggestions, please let me know.
>
> Thanks,
> Praveen
---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org