mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-17 10:25:15 +00:00
SecurityIndexSearcherWrapper doesn't always carry over caches and similarity (#43436)
If DocumentLevelSecurity is enabled SecurityIndexSearcherWrapper doesn't carry over the cache, cache policy and similarity from the incoming searcher.
This commit is contained in:
parent
059eb55108
commit
424ef4f158
@ -124,11 +124,11 @@ public class SecurityIndexSearcherWrapper extends IndexSearcherWrapper {
|
||||
// The reasons why we return a custom searcher:
|
||||
// 1) in the case the role query is sparse then large part of the main query can be skipped
|
||||
// 2) If the role query doesn't match with any docs in a segment, that a segment can be skipped
|
||||
IndexSearcher indexSearcher = new IndexSearcherWrapper((DocumentSubsetDirectoryReader) directoryReader);
|
||||
indexSearcher.setQueryCache(indexSearcher.getQueryCache());
|
||||
indexSearcher.setQueryCachingPolicy(indexSearcher.getQueryCachingPolicy());
|
||||
indexSearcher.setSimilarity(indexSearcher.getSimilarity());
|
||||
return indexSearcher;
|
||||
IndexSearcher searcherWrapper = new IndexSearcherWrapper((DocumentSubsetDirectoryReader) directoryReader);
|
||||
searcherWrapper.setQueryCache(searcher.getQueryCache());
|
||||
searcherWrapper.setQueryCachingPolicy(searcher.getQueryCachingPolicy());
|
||||
searcherWrapper.setSimilarity(searcher.getSimilarity());
|
||||
return searcherWrapper;
|
||||
}
|
||||
return searcher;
|
||||
}
|
||||
|
@ -19,12 +19,14 @@ import org.apache.lucene.index.NoMergePolicy;
|
||||
import org.apache.lucene.index.PostingsEnum;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.index.TermsEnum;
|
||||
import org.apache.lucene.misc.SweetSpotSimilarity;
|
||||
import org.apache.lucene.search.BulkScorer;
|
||||
import org.apache.lucene.search.Explanation;
|
||||
import org.apache.lucene.search.IndexSearcher;
|
||||
import org.apache.lucene.search.LeafCollector;
|
||||
import org.apache.lucene.search.MatchAllDocsQuery;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.apache.lucene.search.QueryCachingPolicy;
|
||||
import org.apache.lucene.search.Scorer;
|
||||
import org.apache.lucene.search.TermQuery;
|
||||
import org.apache.lucene.search.Weight;
|
||||
@ -198,11 +200,25 @@ public class SecurityIndexSearcherWrapperUnitTests extends ESTestCase {
|
||||
});
|
||||
DirectoryReader directoryReader = DocumentSubsetReader.wrap(esIn, bitsetFilterCache, new MatchAllDocsQuery());
|
||||
IndexSearcher indexSearcher = new IndexSearcher(directoryReader);
|
||||
indexSearcher.setSimilarity(new SweetSpotSimilarity());
|
||||
indexSearcher.setQueryCachingPolicy(new QueryCachingPolicy() {
|
||||
@Override
|
||||
public void onUse(Query query) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldCache(Query query) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
indexSearcher.setQueryCache((weight, policy) -> weight);
|
||||
securityIndexSearcherWrapper =
|
||||
new SecurityIndexSearcherWrapper(null, null, threadContext, licenseState, scriptService);
|
||||
IndexSearcher result = securityIndexSearcherWrapper.wrap(indexSearcher);
|
||||
assertThat(result, not(sameInstance(indexSearcher)));
|
||||
assertThat(result.getSimilarity(), sameInstance(indexSearcher.getSimilarity()));
|
||||
assertThat(result.getQueryCachingPolicy(), sameInstance(indexSearcher.getQueryCachingPolicy()));
|
||||
assertThat(result.getQueryCache(), sameInstance(indexSearcher.getQueryCache()));
|
||||
bitsetFilterCache.close();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user