|
@@ -28,6 +28,7 @@ import org.elasticsearch.action.termvector.TermVectorResponse;
|
|
|
import org.elasticsearch.common.Strings;
|
|
|
import org.elasticsearch.common.inject.Inject;
|
|
|
import org.elasticsearch.common.lucene.uid.Versions;
|
|
|
+import org.elasticsearch.common.regex.Regex;
|
|
|
import org.elasticsearch.common.settings.Settings;
|
|
|
import org.elasticsearch.index.engine.Engine;
|
|
|
import org.elasticsearch.index.get.GetField;
|
|
@@ -71,8 +72,12 @@ public class ShardTermVectorService extends AbstractIndexShardComponent {
|
|
|
Fields topLevelFields = MultiFields.getFields(topLevelReader);
|
|
|
Versions.DocIdAndVersion docIdAndVersion = Versions.loadDocIdAndVersion(topLevelReader, uidTerm);
|
|
|
if (docIdAndVersion != null) {
|
|
|
- Fields termVectorsByField = docIdAndVersion.context.reader().getTermVectors(docIdAndVersion.docId);
|
|
|
+ /* handle potential wildcards in fields */
|
|
|
+ if (request.selectedFields() != null) {
|
|
|
+ handleFieldWildcards(request);
|
|
|
+ }
|
|
|
/* generate term vectors if not available */
|
|
|
+ Fields termVectorsByField = docIdAndVersion.context.reader().getTermVectors(docIdAndVersion.docId);
|
|
|
if (request.selectedFields() != null) {
|
|
|
termVectorsByField = generateTermVectorsIfNeeded(termVectorsByField, request, uidTerm, false);
|
|
|
}
|
|
@@ -90,6 +95,14 @@ public class ShardTermVectorService extends AbstractIndexShardComponent {
|
|
|
return termVectorResponse;
|
|
|
}
|
|
|
|
|
|
+ private void handleFieldWildcards(TermVectorRequest request) {
|
|
|
+ Set<String> fieldNames = new HashSet<>();
|
|
|
+ for (String pattern : request.selectedFields()) {
|
|
|
+ fieldNames.addAll(indexShard.mapperService().simpleMatchToIndexNames(pattern));
|
|
|
+ }
|
|
|
+ request.selectedFields(fieldNames.toArray(Strings.EMPTY_ARRAY));
|
|
|
+ }
|
|
|
+
|
|
|
private Fields generateTermVectorsIfNeeded(Fields termVectorsByField, TermVectorRequest request, Term uidTerm, boolean realTime) throws IOException {
|
|
|
List<String> validFields = new ArrayList<>();
|
|
|
for (String field : request.selectedFields()) {
|
|
@@ -187,4 +200,5 @@ public class ShardTermVectorService extends AbstractIndexShardComponent {
|
|
|
return fields.size();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
}
|