lucene 4: rollback optimization in SingleFieldVisitor for now to make it work
This commit is contained in:
parent
cfbd17992a
commit
ffd262e96f
|
@ -30,10 +30,9 @@ import java.util.List;
|
|||
/**
|
||||
*
|
||||
*/
|
||||
public class SingleFieldVisitor extends BaseFieldVisitor {
|
||||
public class SingleFieldVisitor extends AbstractMultipleFieldsVisitor {
|
||||
|
||||
private String name;
|
||||
private List<String> values;
|
||||
|
||||
public SingleFieldVisitor() {
|
||||
}
|
||||
|
@ -46,44 +45,11 @@ public class SingleFieldVisitor extends BaseFieldVisitor {
|
|||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Document createDocument() {
|
||||
Document document = new Document();
|
||||
for (String value : values) {
|
||||
document.add(new StoredField(name, value));
|
||||
}
|
||||
return document;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
values = null;
|
||||
}
|
||||
|
||||
public String value() {
|
||||
return values.get(0);
|
||||
}
|
||||
|
||||
public List<String> values() {
|
||||
return values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Status needsField(FieldInfo fieldInfo) throws IOException {
|
||||
if (name.equals(fieldInfo.name)) {
|
||||
return Status.YES;
|
||||
}
|
||||
|
||||
return values != null ? Status.STOP : Status.NO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stringField(FieldInfo fieldInfo, String value) throws IOException {
|
||||
if (fieldInfo.name.equals(name)) {
|
||||
if (values == null) {
|
||||
values = new ArrayList<String>();
|
||||
}
|
||||
values.add(value);
|
||||
}
|
||||
return Status.NO;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,8 @@ import com.google.common.collect.ImmutableMap;
|
|||
import com.google.common.collect.Maps;
|
||||
import org.apache.lucene.analysis.Analyzer;
|
||||
import org.apache.lucene.analysis.TokenStream;
|
||||
import org.apache.lucene.document.Document;
|
||||
import org.apache.lucene.index.IndexableField;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.apache.lucene.search.highlight.*;
|
||||
import org.apache.lucene.search.highlight.Formatter;
|
||||
|
@ -169,7 +171,13 @@ public class HighlightPhase extends AbstractComponent implements FetchSubPhase {
|
|||
try {
|
||||
SingleFieldVisitor fieldVisitor = new SingleFieldVisitor(mapper.names().indexName());
|
||||
hitContext.reader().document(hitContext.docId(), fieldVisitor);
|
||||
textsToHighlight = (List) fieldVisitor.values();
|
||||
Document doc = fieldVisitor.createDocument();
|
||||
textsToHighlight = new ArrayList<Object>(doc.getFields().size());
|
||||
for (IndexableField docField : doc.getFields()) {
|
||||
if (docField.stringValue() != null) {
|
||||
textsToHighlight.add(docField.stringValue());
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new FetchPhaseExecutionException(context, "Failed to highlight field [" + field.field() + "]", e);
|
||||
}
|
||||
|
|
|
@ -159,6 +159,8 @@ public class FieldsLookup implements Map {
|
|||
data.doc(fieldVisitor.createDocument());
|
||||
} catch (IOException e) {
|
||||
throw new ElasticSearchParseException("failed to load field [" + name + "]", e);
|
||||
} finally {
|
||||
fieldVisitor.reset();
|
||||
}
|
||||
}
|
||||
return data;
|
||||
|
|
Loading…
Reference in New Issue