lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Chris Bamford <cbamf...@mimecast.com>
Subject Filtering question
Date Tue, 10 Mar 2015 12:45:51 GMT
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
Senior Developer
m: +44 7860 405292
p: +44 207 847 8700
w: www.mimecast.com
Address click here: www.mimecast.com/About-us/Contact-us/







Mime
  • Unnamed multipart/related (inline, None, 0 bytes)
View raw message