lucene 4: fix warmup process
also removed ExtendedIndexSearcher, we should do whats needed with the new context and leaves methods
This commit is contained in:
parent
0c24928ef4
commit
81d148b4e4
|
@ -1,49 +0,0 @@
|
||||||
/*
|
|
||||||
* Licensed to ElasticSearch and Shay Banon under one
|
|
||||||
* or more contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. ElasticSearch licenses this
|
|
||||||
* file to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.apache.lucene.index;
|
|
||||||
|
|
||||||
import org.apache.lucene.search.IndexSearcher;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class ExtendedIndexSearcher extends IndexSearcher {
|
|
||||||
|
|
||||||
public ExtendedIndexSearcher(ExtendedIndexSearcher searcher) {
|
|
||||||
super(searcher.getIndexReader(), searcher.subReaders(), searcher.docStarts());
|
|
||||||
setSimilarity(searcher.getSimilarity());
|
|
||||||
}
|
|
||||||
|
|
||||||
public ExtendedIndexSearcher(IndexReader r) {
|
|
||||||
super(r);
|
|
||||||
}
|
|
||||||
|
|
||||||
public IndexReader[] subReaders() {
|
|
||||||
return this.subReaders;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int[] docStarts() {
|
|
||||||
return this.docStarts;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int readerIndex(int doc) {
|
|
||||||
return DirectoryReader.readerIndex(doc, docStarts, subReaders.length);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -21,7 +21,6 @@ package org.elasticsearch.index.engine;
|
||||||
|
|
||||||
import org.apache.lucene.analysis.Analyzer;
|
import org.apache.lucene.analysis.Analyzer;
|
||||||
import org.apache.lucene.document.Document;
|
import org.apache.lucene.document.Document;
|
||||||
import org.apache.lucene.index.ExtendedIndexSearcher;
|
|
||||||
import org.apache.lucene.index.IndexReader;
|
import org.apache.lucene.index.IndexReader;
|
||||||
import org.apache.lucene.index.Term;
|
import org.apache.lucene.index.Term;
|
||||||
import org.apache.lucene.search.Filter;
|
import org.apache.lucene.search.Filter;
|
||||||
|
@ -156,7 +155,7 @@ public interface Engine extends IndexShardComponent, CloseableComponent {
|
||||||
|
|
||||||
IndexReader reader();
|
IndexReader reader();
|
||||||
|
|
||||||
ExtendedIndexSearcher searcher();
|
IndexSearcher searcher();
|
||||||
}
|
}
|
||||||
|
|
||||||
static class SimpleSearcher implements Searcher {
|
static class SimpleSearcher implements Searcher {
|
||||||
|
@ -173,8 +172,8 @@ public interface Engine extends IndexShardComponent, CloseableComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ExtendedIndexSearcher searcher() {
|
public IndexSearcher searcher() {
|
||||||
return (ExtendedIndexSearcher) searcher;
|
return searcher;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1419,8 +1419,8 @@ public class RobinEngine extends AbstractIndexShardComponent implements Engine {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ExtendedIndexSearcher searcher() {
|
public IndexSearcher searcher() {
|
||||||
return (ExtendedIndexSearcher) searcher;
|
return searcher;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1468,13 +1468,13 @@ public class RobinEngine extends AbstractIndexShardComponent implements Engine {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IndexSearcher newSearcher(IndexReader reader) throws IOException {
|
public IndexSearcher newSearcher(IndexReader reader) throws IOException {
|
||||||
ExtendedIndexSearcher searcher = new ExtendedIndexSearcher(reader);
|
IndexSearcher searcher = new IndexSearcher(reader);
|
||||||
searcher.setSimilarity(similarityService.defaultSearchSimilarity());
|
searcher.setSimilarity(similarityService.defaultSearchSimilarity());
|
||||||
if (warmer != null) {
|
if (warmer != null) {
|
||||||
// we need to pass a custom searcher that does not release anything on Engine.Search Release,
|
// we need to pass a custom searcher that does not release anything on Engine.Search Release,
|
||||||
// we will release explicitly
|
// we will release explicitly
|
||||||
Searcher currentSearcher = null;
|
Searcher currentSearcher = null;
|
||||||
ExtendedIndexSearcher newSearcher = null;
|
IndexSearcher newSearcher = null;
|
||||||
boolean closeNewSearcher = false;
|
boolean closeNewSearcher = false;
|
||||||
try {
|
try {
|
||||||
if (searcherManager == null) {
|
if (searcherManager == null) {
|
||||||
|
@ -1484,21 +1484,21 @@ public class RobinEngine extends AbstractIndexShardComponent implements Engine {
|
||||||
currentSearcher = searcher();
|
currentSearcher = searcher();
|
||||||
// figure out the newSearcher, with only the new readers that are relevant for us
|
// figure out the newSearcher, with only the new readers that are relevant for us
|
||||||
List<IndexReader> readers = Lists.newArrayList();
|
List<IndexReader> readers = Lists.newArrayList();
|
||||||
for (IndexReader subReader : searcher.subReaders()) {
|
for (AtomicReaderContext newReaderContext : searcher.getIndexReader().leaves()) {
|
||||||
boolean found = false;
|
boolean found = false;
|
||||||
for (IndexReader currentReader : currentSearcher.searcher().subReaders()) {
|
for (AtomicReaderContext currentReaderContext : currentSearcher.reader().leaves()) {
|
||||||
if (currentReader.getCoreCacheKey().equals(subReader.getCoreCacheKey())) {
|
if (currentReaderContext.reader().getCoreCacheKey().equals(newReaderContext.reader().getCoreCacheKey())) {
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!found) {
|
if (!found) {
|
||||||
readers.add(subReader);
|
readers.add(newReaderContext.reader());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!readers.isEmpty()) {
|
if (!readers.isEmpty()) {
|
||||||
// we don't want to close the inner readers, just increase ref on them
|
// we don't want to close the inner readers, just increase ref on them
|
||||||
newSearcher = new ExtendedIndexSearcher(new MultiReader(readers.toArray(new IndexReader[readers.size()]), false));
|
newSearcher = new IndexSearcher(new MultiReader(readers.toArray(new IndexReader[readers.size()]), false));
|
||||||
closeNewSearcher = true;
|
closeNewSearcher = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1520,13 +1520,7 @@ public class RobinEngine extends AbstractIndexShardComponent implements Engine {
|
||||||
}
|
}
|
||||||
if (newSearcher != null && closeNewSearcher) {
|
if (newSearcher != null && closeNewSearcher) {
|
||||||
try {
|
try {
|
||||||
newSearcher.close();
|
// close the reader since we want decRef the inner readers
|
||||||
} catch (Exception e) {
|
|
||||||
// ignore
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
// close the reader as well, since closing the searcher does nothing
|
|
||||||
// and we want to decRef the inner readers
|
|
||||||
newSearcher.getIndexReader().close();
|
newSearcher.getIndexReader().close();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
// ignore
|
// ignore
|
||||||
|
|
|
@ -22,7 +22,6 @@ package org.elasticsearch.search.internal;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import org.apache.lucene.index.ExtendedIndexSearcher;
|
|
||||||
import org.apache.lucene.index.IndexReader;
|
import org.apache.lucene.index.IndexReader;
|
||||||
import org.apache.lucene.search.*;
|
import org.apache.lucene.search.*;
|
||||||
import org.elasticsearch.common.lucene.MinimumScoreCollector;
|
import org.elasticsearch.common.lucene.MinimumScoreCollector;
|
||||||
|
@ -39,7 +38,7 @@ import java.util.Map;
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class ContextIndexSearcher extends ExtendedIndexSearcher {
|
public class ContextIndexSearcher extends IndexSearcher {
|
||||||
|
|
||||||
public static final class Scopes {
|
public static final class Scopes {
|
||||||
public static final String MAIN = "_main_";
|
public static final String MAIN = "_main_";
|
||||||
|
@ -58,9 +57,9 @@ public class ContextIndexSearcher extends ExtendedIndexSearcher {
|
||||||
private String processingScope;
|
private String processingScope;
|
||||||
|
|
||||||
public ContextIndexSearcher(SearchContext searchContext, Engine.Searcher searcher) {
|
public ContextIndexSearcher(SearchContext searchContext, Engine.Searcher searcher) {
|
||||||
super(searcher.searcher());
|
super(searcher.reader());
|
||||||
this.searchContext = searchContext;
|
this.searchContext = searchContext;
|
||||||
this.reader = searcher.searcher().getIndexReader();
|
this.reader = searcher.reader();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dfSource(CachedDfSource dfSource) {
|
public void dfSource(CachedDfSource dfSource) {
|
||||||
|
|
Loading…
Reference in New Issue