org.elasticsearch.index.mapper.IndexFieldMapper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of elasticsearch Show documentation
Show all versions of elasticsearch Show documentation
Elasticsearch subproject :server
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
package org.elasticsearch.index.mapper;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.Query;
import org.elasticsearch.common.Strings;
import org.elasticsearch.index.fielddata.IndexFieldData;
import org.elasticsearch.index.fielddata.plain.ConstantIndexFieldData;
import org.elasticsearch.index.query.SearchExecutionContext;
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
import org.elasticsearch.search.lookup.SearchLookup;
import org.elasticsearch.search.lookup.SourceLookup;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.function.Supplier;
public class IndexFieldMapper extends MetadataFieldMapper {
public static final String NAME = "_index";
public static final String CONTENT_TYPE = "_index";
private static final IndexFieldMapper INSTANCE = new IndexFieldMapper();
public static final TypeParser PARSER = new FixedTypeParser(c -> INSTANCE);
static final class IndexFieldType extends ConstantFieldType {
static final IndexFieldType INSTANCE = new IndexFieldType();
private IndexFieldType() {
super(NAME, Collections.emptyMap());
}
@Override
public String typeName() {
return CONTENT_TYPE;
}
@Override
protected boolean matches(String pattern, boolean caseInsensitive, SearchExecutionContext context) {
if (caseInsensitive) {
// Thankfully, all index names are lower-cased so we don't have to pass a case_insensitive mode flag
// down to all the index name-matching logic. We just lower-case the search string
pattern = Strings.toLowercaseAscii(pattern);
}
return context.indexMatches(pattern);
}
@Override
public Query existsQuery(SearchExecutionContext context) {
return new MatchAllDocsQuery();
}
@Override
public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName, Supplier searchLookup) {
return new ConstantIndexFieldData.Builder(fullyQualifiedIndexName, name(), CoreValuesSourceType.KEYWORD);
}
@Override
public ValueFetcher valueFetcher(SearchExecutionContext context, String format) {
return new ValueFetcher() {
private final List