Occur.FILTER clarification

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Occur.FILTER clarification

Ahmet Arslan
Hi all,
I am trying to access document lenght statistics of the documents that do not contain a given term.
I have written following piece of code

BooleanQuery.Builder builder = new BooleanQuery.Builder();builder.add(new MatchAllDocsQuery(), BooleanClause.Occur.MUST)        .add(new TermQuery(term), BooleanClause.Occur.FILTER);
ScoreDoc[] hits = searcher.search(new ConstantScoreQuery(builder.build()), Integer.MAX_VALUE).scoreDocs;
Javadoc says FILTER is like MUST except that these clauses do not participate in scoring.
I was expecting FILTER behaves like MUST_NO, no? (FILTER-clause is excluded from the result set)

Also, to disable scoring altogether, is it enough to wrap final boolean query using ConstantQuery?Or individual clauses should be wrapped to?
MatchAllDocsQuery is already ConstantQuery, right?
Thanks,Ahmet
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Occur.FILTER clarification

Adrien Grand
FILTER does the opposite of MUST_NOT.

Regarding scoring, putting the query in a FILTER or MUST_NOT clause is good
enough since such clauses do not need scores. You do not need to add an
additional ConstantScoreQuery wrapper.

Le mar. 8 août 2017 à 23:06, Ahmet Arslan <[hidden email]> a
écrit :

> Hi all,
> I am trying to access document lenght statistics of the documents that do
> not contain a given term.
> I have written following piece of code
>
> BooleanQuery.Builder builder = new BooleanQuery.Builder();builder.add(new
> MatchAllDocsQuery(), BooleanClause.Occur.MUST)        .add(new
> TermQuery(term), BooleanClause.Occur.FILTER);
> ScoreDoc[] hits = searcher.search(new ConstantScoreQuery(builder.build()),
> Integer.MAX_VALUE).scoreDocs;
> Javadoc says FILTER is like MUST except that these clauses do not
> participate in scoring.
> I was expecting FILTER behaves like MUST_NO, no? (FILTER-clause is
> excluded from the result set)
>
> Also, to disable scoring altogether, is it enough to wrap final boolean
> query using ConstantQuery?Or individual clauses should be wrapped to?
> MatchAllDocsQuery is already ConstantQuery, right?
> Thanks,Ahmet
>
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Occur.FILTER clarification

Ahmet Arslan
Hi Adrien,
Thank you for the explanation.
Here is what I have ended up with.
BooleanQuery.Builder builder = new BooleanQuery.Builder();
builder
.add(new MatchAllDocsQuery(), BooleanClause.Occur.FILTER)
.add(new TermQuery(term), BooleanClause.Occur.MUST_NOT);

Ahmet

On Friday, August 11, 2017, 3:58:25 PM GMT+3, Adrien Grand <[hidden email]> wrote:


FILTER does the opposite of MUST_NOT.

Regarding scoring, putting the query in a FILTER or MUST_NOT clause is good
enough since such clauses do not need scores. You do not need to add an
additional ConstantScoreQuery wrapper.

Le mar. 8 août 2017 à 23:06, Ahmet Arslan <[hidden email]> a
écrit :


> Hi all,
> I am trying to access document lenght statistics of the documents that do
> not contain a given term.
> I have written following piece of code
>
> BooleanQuery.Builder builder = new BooleanQuery.Builder();builder.add(new
> MatchAllDocsQuery(), BooleanClause.Occur.MUST)        .add(new
> TermQuery(term), BooleanClause.Occur.FILTER);
> ScoreDoc[] hits = searcher.search(new ConstantScoreQuery(builder.build()),
> Integer.MAX_VALUE).scoreDocs;
> Javadoc says FILTER is like MUST except that these clauses do not
> participate in scoring.
> I was expecting FILTER behaves like MUST_NO, no? (FILTER-clause is
> excluded from the result set)
>
> Also, to disable scoring altogether, is it enough to wrap final boolean
> query using ConstantQuery?Or individual clauses should be wrapped to?
> MatchAllDocsQuery is already ConstantQuery, right?
> Thanks,Ahmet
>
Loading...