Java tutorial
/* * Licensed to Elasticsearch 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.percolator; import org.apache.lucene.analysis.core.WhitespaceAnalyzer; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.index.NoMergePolicy; import org.apache.lucene.search.Query; import org.apache.lucene.search.TermQuery; import org.apache.lucene.store.Directory; import org.elasticsearch.Version; import org.elasticsearch.cluster.metadata.IndexMetaData; import org.elasticsearch.common.CheckedFunction; import org.elasticsearch.common.io.stream.NamedWriteableRegistry; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.NamedXContentRegistry; import org.elasticsearch.index.Index; import org.elasticsearch.index.fielddata.plain.BytesBinaryDVIndexFieldData; import org.elasticsearch.index.mapper.BinaryFieldMapper; import org.elasticsearch.index.mapper.ContentPath; import org.elasticsearch.index.mapper.Mapper; import org.elasticsearch.index.mapper.ParseContext; import org.elasticsearch.index.query.QueryShardContext; import org.elasticsearch.index.query.TermQueryBuilder; import org.elasticsearch.search.SearchModule; import org.elasticsearch.test.ESTestCase; import java.io.IOException; import java.util.Collections; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class QueryBuilderStoreTests extends ESTestCase { @Override protected NamedWriteableRegistry writableRegistry() { SearchModule searchModule = new SearchModule(Settings.EMPTY, false, Collections.emptyList()); return new NamedWriteableRegistry(searchModule.getNamedWriteables()); } @Override protected NamedXContentRegistry xContentRegistry() { SearchModule searchModule = new SearchModule(Settings.EMPTY, false, Collections.emptyList()); return new NamedXContentRegistry(searchModule.getNamedXContents()); } public void testStoringQueryBuilders() throws IOException { try (Directory directory = newDirectory()) { TermQueryBuilder[] queryBuilders = new TermQueryBuilder[randomIntBetween(1, 16)]; IndexWriterConfig config = new IndexWriterConfig(new WhitespaceAnalyzer()); config.setMergePolicy(NoMergePolicy.INSTANCE); Settings settings = Settings.builder().put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT) .build(); BinaryFieldMapper fieldMapper = PercolatorFieldMapper.Builder .createQueryBuilderFieldBuilder(new Mapper.BuilderContext(settings, new ContentPath(0))); Version version = randomBoolean() ? Version.V_5_6_0 : Version.V_6_0_0_beta2; try (IndexWriter indexWriter = new IndexWriter(directory, config)) { for (int i = 0; i < queryBuilders.length; i++) { queryBuilders[i] = new TermQueryBuilder(randomAlphaOfLength(4), randomAlphaOfLength(8)); ParseContext parseContext = mock(ParseContext.class); ParseContext.Document document = new ParseContext.Document(); when(parseContext.doc()).thenReturn(document); PercolatorFieldMapper.createQueryBuilderField(version, fieldMapper, queryBuilders[i], parseContext); indexWriter.addDocument(document); } } QueryShardContext queryShardContext = mock(QueryShardContext.class); when(queryShardContext.indexVersionCreated()).thenReturn(version); when(queryShardContext.getWriteableRegistry()).thenReturn(writableRegistry()); when(queryShardContext.getXContentRegistry()).thenReturn(xContentRegistry()); when(queryShardContext.getForField(fieldMapper.fieldType())) .thenReturn(new BytesBinaryDVIndexFieldData(new Index("index", "uuid"), fieldMapper.name())); PercolateQuery.QueryStore queryStore = PercolateQueryBuilder.createStore(fieldMapper.fieldType(), queryShardContext, false); try (IndexReader indexReader = DirectoryReader.open(directory)) { LeafReaderContext leafContext = indexReader.leaves().get(0); CheckedFunction<Integer, Query, IOException> queries = queryStore.getQueries(leafContext); assertEquals(queryBuilders.length, leafContext.reader().numDocs()); for (int i = 0; i < queryBuilders.length; i++) { TermQuery query = (TermQuery) queries.apply(i); assertEquals(queryBuilders[i].fieldName(), query.getTerm().field()); assertEquals(queryBuilders[i].value(), query.getTerm().text()); } } } } }