Additional -
I'm on lucene 4.10.2

If I use a BooleanFilter as per Ian's suggestion I still get a null acceptDocs 
being passed to my NDV filter.


Sent from my iPhone

> On 11 Mar 2015, at 17:19, Chris Bamford <ch...@bammers.net> wrote:
> 
> Hi Shai
> 
> I thought that might be what acceptDocs was for, but in my case it is null 
> and throws a NPE if I try your suggestion.
> 
> What am I doing wrong? I'd like to really understand this stuff ..
> 
> Thanks 
> 
> Chris
> 
> 
>> On 11 Mar 2015, at 13:05, Shai Erera <ser...@gmail.com> wrote:
>> 
>> I don't see that you use acceptDocs in your MyNDVFilter. I think it would
>> return false for all userB docs, but you should confirm that.
>> 
>> Anyway, because you use an NDV field, you can't automatically skip
>> unrelated documents, but rather your code would look something like:
>> 
>> for (int i = 0; i < reader.maxDoc(); i++) {
>> if (!acceptDocs.get(i)) {
>>   continue;
>> }
>> // document is accepted, read values
>> ...
>> }
>> 
>> Shai
>> 
>>> On Wed, Mar 11, 2015 at 1:25 PM, Ian Lea <ian....@gmail.com> wrote:
>>> 
>>> Can you use a BooleanFilter (or ChainedFilter in 4.x) alongside your
>>> BooleanQuery?   Seems more logical and I suspect would solve the problem.
>>> Caching filters can be good too, depending on how often your data changes.
>>> See CachingWrapperFilter.
>>> 
>>> --
>>> Ian.
>>> 
>>> 
>>> On Tue, Mar 10, 2015 at 12:45 PM, Chris Bamford <cbamf...@mimecast.com>
>>> wrote:
>>> 
>>>> 
>>>> Hi,
>>>> 
>>>> I have an index of 30 docs, 20 of which have an owner field of "UserA"
>>>> and 10 of "UserB".
>>>> I also have a query which consists of:
>>>> 
>>>> BooleanQuery:
>>>> -- Clause 1: TermQuery
>>>> -- Clause 2: FilteredQuery
>>>> ----- Branch 1: MatchAllDocsQuery()
>>>> ----- Branch 2: MyNDVFilter
>>>> 
>>>> I execute my search as follows:
>>>> 
>>>> searcher.search( booleanQuery,
>>>>                                   new TermFilter(new Term("owner",
>>>> "UserA"),
>>>>                                   50);
>>>> 
>>>> The TermFilter's job is to reduce the number of searchable documents
>>>> from 30 to 20, which it does for all clauses of the BooleanQuery except
>>> for
>>>> MyNDVFilter which iterates through the full 30 docs, 10 needlessly.  How
>>>> can I restrict it so it behaves the same as the other query branches?
>>>> 
>>>> MyNDVFilter source code:
>>>> 
>>>> public class MyNDVFilter extends Filter {
>>>> 
>>>>    private String fieldName;
>>>>   private String matchTag;
>>>> 
>>>>    public TagFilter(String ndvFieldName, String matchTag) {
>>>>       this.fieldName = ndvFieldName;
>>>>       this.matchTag = matchTag;
>>>>   }
>>>> 
>>>>    @Override
>>>>   public DocIdSet getDocIdSet(AtomicReaderContext context, Bits
>>>> acceptDocs) throws IOException {
>>>> 
>>>>        AtomicReader reader = context.reader();
>>>>       int maxDoc = reader.maxDoc();
>>>>       final FixedBitSet bitSet = new FixedBitSet(maxDoc);
>>>>       BinaryDocValues ndv = reader.getBinaryDocValues(fieldName);
>>>> 
>>>>        if (ndv != null) {
>>>>           for (int i = 0; i < maxDoc; i++) {
>>>>               BytesRef br = ndv.get(i);
>>>>               if (br.length > 0) {
>>>>                   String strval = br.utf8ToString();
>>>>                   if (strval.equals(matchTag)) {
>>>>                       bitSet.set(i);
>>>>                       System.out.println("MyNDVFilter >> " + matchTag +
>>>> " matched " + i + " [" + strval + "]");
>>>>                   }
>>>>               }
>>>>           }
>>>>       }
>>>> 
>>>>        return new DVDocSetId(bitSet);    // just wraps a FixedBitSet
>>>>   }
>>>> }
>>>> 
>>>> 
>>>> 
>>>> Chris Bamford m: +44 7860 405292  w: www.mimecast.com  Senior
>>> Developer p:
>>>> +44 207 847 8700 Address click here
>>>> <http://www.mimecast.com/About-us/Contact-us/>
>>>> ------------------------------
>>>> [image: http://www.mimecast.com]
>>>> <
>>> https://serviceA.mimecast.com/mimecast/click?account=C1A1&code=83be674748892bc34425eb4133af3e68
>>>> 
>>>> [image: LinkedIn]
>>>> <
>>> https://serviceA.mimecast.com/mimecast/click?account=C1A1&code=83a78f78bdfa40c471501ae0b813a68f>
>>> [image:
>>>> YouTube]
>>>> <
>>> https://serviceA.mimecast.com/mimecast/click?account=C1A1&code=ad1ed1af5bb9cf9dc965267ed43faff0>
>>> [image:
>>>> Facebook]
>>>> <
>>> https://serviceA.mimecast.com/mimecast/click?account=C1A1&code=172d4ea57e4a4673452098ba62badace>
>>> [image:
>>>> Blog]
>>>> <
>>> https://serviceA.mimecast.com/mimecast/click?account=C1A1&code=871b30b627b3263b9ae2a8f37b0de5ff>
>>> [image:
>>>> Twitter]
>>>> <
>>> https://serviceA.mimecast.com/mimecast/click?account=C1A1&code=cc3a825e202ee26a108f3ef8a1dc3c6f
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
> For additional commands, e-mail: java-user-h...@lucene.apache.org
> 

---------------------------------------------------------------------
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