* <p>
* Note: Scrolling isn't supported.
* </p>
*/
private SearchContext createContext(QueryShardRequest request, @Nullable Engine.Searcher searcher) {
IndexService indexService = indicesService.indexServiceSafe(request.index());
IndexShard indexShard = indexService.shardSafe(request.shardId());
SearchShardTarget searchShardTarget = new SearchShardTarget(
clusterService.localNode().id(),
request.index(),
request.shardId()
);
Engine.Searcher engineSearcher = searcher == null ? indexShard.acquireSearcher("search") : searcher;
ShardSearchRequest shardSearchRequest = new ShardSearchRequest();
shardSearchRequest.types(new String[] {Constants.DEFAULT_MAPPING_TYPE });
// TODO: use own CrateSearchContext that doesn't require ShardSearchRequest
SearchContext context = new DefaultSearchContext(
idGenerator.incrementAndGet(),
shardSearchRequest,
searchShardTarget,
engineSearcher,
indexService,
indexShard,
scriptService,
cacheRecycler,
pageCacheRecycler,
bigArrays
);
SearchContext.setCurrent(context);
try {
LuceneQueryBuilder builder = new LuceneQueryBuilder(functions, context, indexService.cache());
LuceneQueryBuilder.Context ctx = builder.convert(request.whereClause());
context.parsedQuery(new ParsedQuery(ctx.query(), ImmutableMap.<String, Filter>of()));
Float minScore = ctx.minScore();
if (minScore != null) {
context.minimumScore(minScore);