fix nested filter to work well with inner nested queries

This commit is contained in:
kimchy 2011-07-09 22:10:58 +03:00
parent 66d5eb94fb
commit 9513dd0a4a
1 changed files with 4 additions and 29 deletions

View File

@ -19,9 +19,7 @@
package org.elasticsearch.index.query;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.search.DeletionAwareConstantScoreQuery;
import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.FilteredQuery;
import org.apache.lucene.search.Query;
@ -60,10 +58,10 @@ public class NestedFilterParser implements FilterParser {
String filterName = null;
// we need a late binding filter so we can inject a parent nested filter inner nested queries
LateBindingParentFilter currentParentFilterContext = parentFilterContext.get();
NestedQueryParser.LateBindingParentFilter currentParentFilterContext = NestedQueryParser.parentFilterContext.get();
LateBindingParentFilter usAsParentFilter = new LateBindingParentFilter();
parentFilterContext.set(usAsParentFilter);
NestedQueryParser.LateBindingParentFilter usAsParentFilter = new NestedQueryParser.LateBindingParentFilter();
NestedQueryParser.parentFilterContext.set(usAsParentFilter);
String currentFieldName = null;
XContentParser.Token token;
@ -131,7 +129,7 @@ public class NestedFilterParser implements FilterParser {
}
// restore the thread local one...
parentFilterContext.set(currentParentFilterContext);
NestedQueryParser.parentFilterContext.set(currentParentFilterContext);
BlockJoinQuery joinQuery = new BlockJoinQuery(query, parentFilter, BlockJoinQuery.ScoreMode.None);
@ -148,27 +146,4 @@ public class NestedFilterParser implements FilterParser {
}
return joinFilter;
}
static ThreadLocal<LateBindingParentFilter> parentFilterContext = new ThreadLocal<LateBindingParentFilter>();
static class LateBindingParentFilter extends Filter {
Filter filter;
@Override public int hashCode() {
return filter.hashCode();
}
@Override public boolean equals(Object obj) {
return filter.equals(obj);
}
@Override public String toString() {
return filter.toString();
}
@Override public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
return filter.getDocIdSet(reader);
}
}
}