|
@@ -23,6 +23,7 @@ import org.apache.lucene.tests.analysis.Token;
|
|
|
import org.apache.lucene.tests.index.RandomIndexWriter;
|
|
|
import org.elasticsearch.common.Strings;
|
|
|
import org.elasticsearch.core.Tuple;
|
|
|
+import org.elasticsearch.index.IndexSettings;
|
|
|
import org.elasticsearch.index.mapper.DocumentMapper;
|
|
|
import org.elasticsearch.index.mapper.KeywordFieldMapper;
|
|
|
import org.elasticsearch.index.mapper.LuceneDocument;
|
|
@@ -46,8 +47,10 @@ import java.util.List;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
import static org.hamcrest.Matchers.containsString;
|
|
|
+import static org.hamcrest.Matchers.empty;
|
|
|
import static org.hamcrest.Matchers.equalTo;
|
|
|
import static org.hamcrest.Matchers.instanceOf;
|
|
|
+import static org.hamcrest.core.Is.is;
|
|
|
|
|
|
public class MatchOnlyTextFieldMapperTests extends MapperTestCase {
|
|
|
|
|
@@ -255,4 +258,91 @@ public class MatchOnlyTextFieldMapperTests extends MapperTestCase {
|
|
|
protected IngestScriptSupport ingestScriptSupport() {
|
|
|
throw new AssumptionViolatedException("not supported");
|
|
|
}
|
|
|
+
|
|
|
+ public void testStoreParameterDefaultsSyntheticSource() throws IOException {
|
|
|
+ var indexSettingsBuilder = getIndexSettingsBuilder();
|
|
|
+ indexSettingsBuilder.put(IndexSettings.INDEX_MAPPER_SOURCE_MODE_SETTING.getKey(), "synthetic");
|
|
|
+ var indexSettings = indexSettingsBuilder.build();
|
|
|
+
|
|
|
+ var mapping = mapping(b -> {
|
|
|
+ b.startObject("name");
|
|
|
+ b.field("type", "match_only_text");
|
|
|
+ b.endObject();
|
|
|
+ });
|
|
|
+ DocumentMapper mapper = createMapperService(indexSettings, mapping).documentMapper();
|
|
|
+
|
|
|
+ var source = source(b -> b.field("name", "quick brown fox"));
|
|
|
+ ParsedDocument doc = mapper.parse(source);
|
|
|
+
|
|
|
+ {
|
|
|
+ List<IndexableField> fields = doc.rootDoc().getFields("name");
|
|
|
+ IndexableFieldType fieldType = fields.get(0).fieldType();
|
|
|
+ assertThat(fieldType.stored(), is(false));
|
|
|
+ }
|
|
|
+ {
|
|
|
+ List<IndexableField> fields = doc.rootDoc().getFields("name._original");
|
|
|
+ IndexableFieldType fieldType = fields.get(0).fieldType();
|
|
|
+ assertThat(fieldType.stored(), is(true));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testStoreParameterDefaultsSyntheticSourceWithKeywordMultiField() throws IOException {
|
|
|
+ var indexSettingsBuilder = getIndexSettingsBuilder();
|
|
|
+ indexSettingsBuilder.put(IndexSettings.INDEX_MAPPER_SOURCE_MODE_SETTING.getKey(), "synthetic");
|
|
|
+ var indexSettings = indexSettingsBuilder.build();
|
|
|
+
|
|
|
+ var mapping = mapping(b -> {
|
|
|
+ b.startObject("name");
|
|
|
+ b.field("type", "match_only_text");
|
|
|
+ b.startObject("fields");
|
|
|
+ b.startObject("keyword");
|
|
|
+ b.field("type", "keyword");
|
|
|
+ b.endObject();
|
|
|
+ b.endObject();
|
|
|
+ b.endObject();
|
|
|
+ });
|
|
|
+ DocumentMapper mapper = createMapperService(indexSettings, mapping).documentMapper();
|
|
|
+
|
|
|
+ var source = source(b -> b.field("name", "quick brown fox"));
|
|
|
+ ParsedDocument doc = mapper.parse(source);
|
|
|
+ {
|
|
|
+ List<IndexableField> fields = doc.rootDoc().getFields("name");
|
|
|
+ IndexableFieldType fieldType = fields.get(0).fieldType();
|
|
|
+ assertThat(fieldType.stored(), is(false));
|
|
|
+ }
|
|
|
+ {
|
|
|
+ List<IndexableField> fields = doc.rootDoc().getFields("name._original");
|
|
|
+ assertThat(fields, empty());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testStoreParameterDefaultsSyntheticSourceTextFieldIsMultiField() throws IOException {
|
|
|
+ var indexSettingsBuilder = getIndexSettingsBuilder();
|
|
|
+ indexSettingsBuilder.put(IndexSettings.INDEX_MAPPER_SOURCE_MODE_SETTING.getKey(), "synthetic");
|
|
|
+ var indexSettings = indexSettingsBuilder.build();
|
|
|
+
|
|
|
+ var mapping = mapping(b -> {
|
|
|
+ b.startObject("name");
|
|
|
+ b.field("type", "keyword");
|
|
|
+ b.startObject("fields");
|
|
|
+ b.startObject("text");
|
|
|
+ b.field("type", "match_only_text");
|
|
|
+ b.endObject();
|
|
|
+ b.endObject();
|
|
|
+ b.endObject();
|
|
|
+ });
|
|
|
+ DocumentMapper mapper = createMapperService(indexSettings, mapping).documentMapper();
|
|
|
+
|
|
|
+ var source = source(b -> b.field("name", "quick brown fox"));
|
|
|
+ ParsedDocument doc = mapper.parse(source);
|
|
|
+ {
|
|
|
+ List<IndexableField> fields = doc.rootDoc().getFields("name.text");
|
|
|
+ IndexableFieldType fieldType = fields.get(0).fieldType();
|
|
|
+ assertThat(fieldType.stored(), is(false));
|
|
|
+ }
|
|
|
+ {
|
|
|
+ List<IndexableField> fields = doc.rootDoc().getFields("name.text._original");
|
|
|
+ assertThat(fields, empty());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|