/* * 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.elasticsearch.test.unit.index.field.data.strings; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.store.Directory; import org.apache.lucene.store.RAMDirectory; import org.elasticsearch.common.lucene.Lucene; import org.elasticsearch.index.field.data.FieldData; import org.elasticsearch.index.field.data.strings.StringFieldData; import org.testng.annotations.Test; import java.util.ArrayList; import static org.elasticsearch.common.lucene.DocumentBuilder.doc; import static org.elasticsearch.common.lucene.DocumentBuilder.field; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; /** * */ public class StringFieldDataTests { @Test public void stringFieldDataTests() throws Exception { Directory dir = new RAMDirectory(); IndexWriter indexWriter = new IndexWriter(dir, new IndexWriterConfig(Lucene.VERSION, Lucene.STANDARD_ANALYZER)); indexWriter.addDocument(doc() .add(field("svalue", "zzz")) .add(field("mvalue", "111")).build()); indexWriter.addDocument(doc() .add(field("svalue", "xxx")) .add(field("mvalue", "222 333")).build()); indexWriter.addDocument(doc() .add(field("mvalue", "333 444")).build()); indexWriter.addDocument(doc() .add(field("svalue", "aaa")).build()); indexWriter.addDocument(doc() .add(field("svalue", "aaa")).build()); IndexReader reader = IndexReader.open(indexWriter, true); StringFieldData sFieldData = StringFieldData.load(reader, "svalue"); StringFieldData mFieldData = StringFieldData.load(reader, "mvalue"); assertThat(sFieldData.fieldName(), equalTo("svalue")); assertThat(sFieldData.multiValued(), equalTo(false)); assertThat(mFieldData.fieldName(), equalTo("mvalue")); assertThat(mFieldData.multiValued(), equalTo(true)); // svalue assertThat(sFieldData.hasValue(0), equalTo(true)); assertThat(sFieldData.value(0), equalTo("zzz")); assertThat(sFieldData.docFieldData(0).getValue(), equalTo("zzz")); assertThat(sFieldData.values(0).length, equalTo(1)); assertThat(sFieldData.docFieldData(0).getValues().length, equalTo(1)); assertThat(sFieldData.values(0)[0], equalTo("zzz")); assertThat(sFieldData.docFieldData(0).getValues()[0], equalTo("zzz")); assertThat(sFieldData.hasValue(1), equalTo(true)); assertThat(sFieldData.value(1), equalTo("xxx")); assertThat(sFieldData.values(1).length, equalTo(1)); assertThat(sFieldData.values(1)[0], equalTo("xxx")); assertThat(sFieldData.hasValue(2), equalTo(false)); assertThat(sFieldData.hasValue(3), equalTo(true)); assertThat(sFieldData.value(3), equalTo("aaa")); assertThat(sFieldData.values(3).length, equalTo(1)); assertThat(sFieldData.values(3)[0], equalTo("aaa")); assertThat(sFieldData.hasValue(4), equalTo(true)); assertThat(sFieldData.value(4), equalTo("aaa")); assertThat(sFieldData.values(4).length, equalTo(1)); assertThat(sFieldData.values(4)[0], equalTo("aaa")); // check order is correct final ArrayList<String> values = new ArrayList<String>(); sFieldData.forEachValue(new FieldData.StringValueProc() { @Override public void onValue(String value) { values.add(value); } }); assertThat(values.size(), equalTo(3)); assertThat(values.get(0), equalTo("aaa")); assertThat(values.get(1), equalTo("xxx")); assertThat(values.get(2), equalTo("zzz")); // mvalue assertThat(mFieldData.hasValue(0), equalTo(true)); assertThat(mFieldData.value(0), equalTo("111")); assertThat(mFieldData.values(0).length, equalTo(1)); assertThat(mFieldData.values(0)[0], equalTo("111")); assertThat(mFieldData.hasValue(1), equalTo(true)); assertThat(mFieldData.value(1), equalTo("222")); assertThat(mFieldData.values(1).length, equalTo(2)); assertThat(mFieldData.values(1)[0], equalTo("222")); assertThat(mFieldData.values(1)[1], equalTo("333")); assertThat(mFieldData.hasValue(2), equalTo(true)); assertThat(mFieldData.value(2), equalTo("333")); assertThat(mFieldData.values(2).length, equalTo(2)); assertThat(mFieldData.values(2)[0], equalTo("333")); assertThat(mFieldData.values(2)[1], equalTo("444")); assertThat(mFieldData.hasValue(3), equalTo(false)); assertThat(mFieldData.hasValue(4), equalTo(false)); values.clear(); mFieldData.forEachValue(new FieldData.StringValueProc() { @Override public void onValue(String value) { values.add(value); } }); assertThat(values.size(), equalTo(4)); assertThat(values.get(0), equalTo("111")); assertThat(values.get(1), equalTo("222")); assertThat(values.get(2), equalTo("333")); assertThat(values.get(3), equalTo("444")); indexWriter.close(); } }