/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.portal.search.elasticsearch.internal; import com.liferay.portal.kernel.search.IndexSearcher; import com.liferay.portal.kernel.search.IndexWriter; import com.liferay.portal.search.elasticsearch.connection.ElasticsearchConnectionManager; import com.liferay.portal.search.elasticsearch.connection.TestElasticsearchConnectionManager; import com.liferay.portal.search.elasticsearch.document.ElasticsearchUpdateDocumentCommand; import com.liferay.portal.search.elasticsearch.index.IndexNameBuilder; import com.liferay.portal.search.elasticsearch.internal.connection.ElasticsearchFixture; import com.liferay.portal.search.elasticsearch.internal.connection.IndexCreator; import com.liferay.portal.search.elasticsearch.internal.connection.IndexName; import com.liferay.portal.search.elasticsearch.internal.document.DefaultElasticsearchDocumentFactory; import com.liferay.portal.search.elasticsearch.internal.facet.DefaultFacetProcessor; import com.liferay.portal.search.elasticsearch.internal.filter.BooleanFilterTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.filter.DateRangeTermFilterTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.filter.ElasticsearchFilterTranslator; import com.liferay.portal.search.elasticsearch.internal.filter.ExistsFilterTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.filter.GeoBoundingBoxFilterTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.filter.GeoDistanceFilterTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.filter.GeoDistanceRangeFilterTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.filter.GeoPolygonFilterTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.filter.MissingFilterTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.filter.PrefixFilterTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.filter.QueryFilterTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.filter.RangeTermFilterTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.filter.TermFilterTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.filter.TermsFilterTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.groupby.DefaultGroupByTranslator; import com.liferay.portal.search.elasticsearch.internal.query.BooleanQueryTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.query.DisMaxQueryTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.query.ElasticsearchQueryTranslator; import com.liferay.portal.search.elasticsearch.internal.query.FuzzyQueryTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.query.MatchAllQueryTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.query.MatchQueryTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.query.MoreLikeThisQueryTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.query.MultiMatchQueryTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.query.NestedQueryTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.query.StringQueryTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.query.TermQueryTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.query.TermRangeQueryTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.query.WildcardQueryTranslatorImpl; import com.liferay.portal.search.elasticsearch.internal.stats.DefaultStatsTranslator; import com.liferay.portal.search.test.util.indexing.IndexingFixture; /** * @author André de Oliveira */ public class ElasticsearchIndexingFixture implements IndexingFixture { public ElasticsearchIndexingFixture( ElasticsearchFixture elasticsearchFixture, long companyId) { this( elasticsearchFixture, companyId, new IndexCreator(elasticsearchFixture)); } public ElasticsearchIndexingFixture( ElasticsearchFixture elasticsearchFixture, long companyId, IndexCreator indexCreator) { _elasticsearchFixture = elasticsearchFixture; _companyId = companyId; _indexCreator = indexCreator; } public ElasticsearchFixture getElasticsearchFixture() { return _elasticsearchFixture; } @Override public IndexSearcher getIndexSearcher() { return _indexSearcher; } @Override public IndexWriter getIndexWriter() { return _indexWriter; } @Override public boolean isSearchEngineAvailable() { return true; } @Override public void setUp() throws Exception { _elasticsearchFixture.setUp(); createIndex(); ElasticsearchConnectionManager elasticsearchConnectionManager = new TestElasticsearchConnectionManager(_elasticsearchFixture); _indexSearcher = createIndexSearcher( elasticsearchConnectionManager, _indexNameBuilder); _indexWriter = createIndexWriter( elasticsearchConnectionManager, _indexNameBuilder); } @Override public void tearDown() throws Exception { _elasticsearchFixture.tearDown(); } protected static ElasticsearchFilterTranslator createElasticsearchFilterTranslator() { return new ElasticsearchFilterTranslator() { { booleanFilterTranslator = new BooleanFilterTranslatorImpl(); dateRangeTermFilterTranslator = new DateRangeTermFilterTranslatorImpl(); existsFilterTranslator = new ExistsFilterTranslatorImpl(); geoBoundingBoxFilterTranslator = new GeoBoundingBoxFilterTranslatorImpl(); geoDistanceFilterTranslator = new GeoDistanceFilterTranslatorImpl(); geoDistanceRangeFilterTranslator = new GeoDistanceRangeFilterTranslatorImpl(); geoPolygonFilterTranslator = new GeoPolygonFilterTranslatorImpl(); missingFilterTranslator = new MissingFilterTranslatorImpl(); prefixFilterTranslator = new PrefixFilterTranslatorImpl(); queryFilterTranslator = new QueryFilterTranslatorImpl(); rangeTermFilterTranslator = new RangeTermFilterTranslatorImpl(); termFilterTranslator = new TermFilterTranslatorImpl(); termsFilterTranslator = new TermsFilterTranslatorImpl(); } }; } protected static ElasticsearchQueryTranslator createElasticsearchQueryTranslator() { return new ElasticsearchQueryTranslator() { { booleanQueryTranslator = new BooleanQueryTranslatorImpl(); disMaxQueryTranslator = new DisMaxQueryTranslatorImpl(); fuzzyQueryTranslator = new FuzzyQueryTranslatorImpl(); matchAllQueryTranslator = new MatchAllQueryTranslatorImpl(); matchQueryTranslator = new MatchQueryTranslatorImpl(); moreLikeThisQueryTranslator = new MoreLikeThisQueryTranslatorImpl(); multiMatchQueryTranslator = new MultiMatchQueryTranslatorImpl(); nestedQueryTranslator = new NestedQueryTranslatorImpl(); stringQueryTranslator = new StringQueryTranslatorImpl(); termQueryTranslator = new TermQueryTranslatorImpl(); termRangeQueryTranslator = new TermRangeQueryTranslatorImpl(); wildcardQueryTranslator = new WildcardQueryTranslatorImpl(); } }; } protected void createIndex() { _indexCreator.createIndex( new IndexName(_indexNameBuilder.getIndexName(_companyId))); } protected IndexSearcher createIndexSearcher( final ElasticsearchConnectionManager elasticsearchConnectionManager1, final IndexNameBuilder indexNameBuilder1) { return new ElasticsearchIndexSearcher() { { elasticsearchConnectionManager = elasticsearchConnectionManager1; facetProcessor = new DefaultFacetProcessor(); filterTranslator = createElasticsearchFilterTranslator(); groupByTranslator = new DefaultGroupByTranslator(); indexNameBuilder = indexNameBuilder1; queryTranslator = createElasticsearchQueryTranslator(); statsTranslator = new DefaultStatsTranslator(); searchHitDocumentTranslator = new SearchHitDocumentTranslatorImpl(); activate( _elasticsearchFixture. getElasticsearchConfigurationProperties()); } }; } protected IndexWriter createIndexWriter( final ElasticsearchConnectionManager elasticsearchConnectionManager1, final IndexNameBuilder indexNameBuilder1) { final ElasticsearchUpdateDocumentCommand updateDocumentCommand = new ElasticsearchUpdateDocumentCommandImpl() { { elasticsearchConnectionManager = elasticsearchConnectionManager1; elasticsearchDocumentFactory = new DefaultElasticsearchDocumentFactory(); indexNameBuilder = indexNameBuilder1; activate( _elasticsearchFixture. getElasticsearchConfigurationProperties()); } }; return new ElasticsearchIndexWriter() { { elasticsearchConnectionManager = elasticsearchConnectionManager1; elasticsearchUpdateDocumentCommand = updateDocumentCommand; indexNameBuilder = indexNameBuilder1; } }; } protected static class TestIndexNameBuilder implements IndexNameBuilder { @Override public String getIndexName(long companyId) { return String.valueOf(companyId); } } private final long _companyId; private final ElasticsearchFixture _elasticsearchFixture; private final IndexCreator _indexCreator; private final IndexNameBuilder _indexNameBuilder = new TestIndexNameBuilder(); private IndexSearcher _indexSearcher; private IndexWriter _indexWriter; }