mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-20 03:45:02 +00:00
date math expressions should also work when indexing documents into a none existing index.
Closes #13570
This commit is contained in:
parent
93ad696966
commit
04cfbe361b
@ -73,7 +73,8 @@ public class TransportCreateIndexAction extends TransportMasterNodeAction<Create
|
|||||||
cause = "api";
|
cause = "api";
|
||||||
}
|
}
|
||||||
|
|
||||||
final CreateIndexClusterStateUpdateRequest updateRequest = new CreateIndexClusterStateUpdateRequest(request, cause, request.index(), request.updateAllTypes())
|
final String indexName = indexNameExpressionResolver.resolveDateMathExpression(request.index());
|
||||||
|
final CreateIndexClusterStateUpdateRequest updateRequest = new CreateIndexClusterStateUpdateRequest(request, cause, indexName, request.updateAllTypes())
|
||||||
.ackTimeout(request.timeout()).masterNodeTimeout(request.masterNodeTimeout())
|
.ackTimeout(request.timeout()).masterNodeTimeout(request.masterNodeTimeout())
|
||||||
.settings(request.settings()).mappings(request.mappings())
|
.settings(request.settings()).mappings(request.mappings())
|
||||||
.aliases(request.aliases()).customs(request.customs());
|
.aliases(request.aliases()).customs(request.customs());
|
||||||
|
@ -219,6 +219,15 @@ public class IndexNameExpressionResolver extends AbstractComponent {
|
|||||||
return state.metaData().getAliasAndIndexLookup().containsKey(resolvedAliasOrIndex);
|
return state.metaData().getAliasAndIndexLookup().containsKey(resolvedAliasOrIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return If the specified string is data math expression then this method returns the resolved expression.
|
||||||
|
*/
|
||||||
|
public String resolveDateMathExpression(String dateExpression) {
|
||||||
|
// The data math expression resolver doesn't rely on cluster state or indices options, because
|
||||||
|
// it just resolves the date math to an actual date.
|
||||||
|
return dateMathExpressionResolver.resolveExpression(dateExpression, new Context(null, null));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Iterates through the list of indices and selects the effective list of filtering aliases for the
|
* Iterates through the list of indices and selects the effective list of filtering aliases for the
|
||||||
* given index.
|
* given index.
|
||||||
|
@ -23,12 +23,15 @@ import org.elasticsearch.action.admin.indices.stats.IndicesStatsResponse;
|
|||||||
import org.elasticsearch.action.delete.DeleteResponse;
|
import org.elasticsearch.action.delete.DeleteResponse;
|
||||||
import org.elasticsearch.action.get.GetResponse;
|
import org.elasticsearch.action.get.GetResponse;
|
||||||
import org.elasticsearch.action.search.SearchResponse;
|
import org.elasticsearch.action.search.SearchResponse;
|
||||||
|
import org.elasticsearch.cluster.ClusterState;
|
||||||
import org.elasticsearch.test.ESIntegTestCase;
|
import org.elasticsearch.test.ESIntegTestCase;
|
||||||
import org.elasticsearch.test.hamcrest.ElasticsearchAssertions;
|
import org.elasticsearch.test.hamcrest.ElasticsearchAssertions;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
import org.joda.time.DateTimeZone;
|
import org.joda.time.DateTimeZone;
|
||||||
import org.joda.time.format.DateTimeFormat;
|
import org.joda.time.format.DateTimeFormat;
|
||||||
|
|
||||||
|
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.*;
|
||||||
|
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertHitCount;
|
||||||
import static org.hamcrest.Matchers.equalTo;
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
import static org.hamcrest.Matchers.is;
|
import static org.hamcrest.Matchers.is;
|
||||||
import static org.hamcrest.Matchers.notNullValue;
|
import static org.hamcrest.Matchers.notNullValue;
|
||||||
@ -51,8 +54,8 @@ public class DateMathIndexExpressionsIntegrationIT extends ESIntegTestCase {
|
|||||||
refresh();
|
refresh();
|
||||||
|
|
||||||
SearchResponse searchResponse = client().prepareSearch(dateMathExp1, dateMathExp2, dateMathExp3).get();
|
SearchResponse searchResponse = client().prepareSearch(dateMathExp1, dateMathExp2, dateMathExp3).get();
|
||||||
ElasticsearchAssertions.assertHitCount(searchResponse, 3);
|
assertHitCount(searchResponse, 3);
|
||||||
ElasticsearchAssertions.assertSearchHits(searchResponse, "1", "2", "3");
|
assertSearchHits(searchResponse, "1", "2", "3");
|
||||||
|
|
||||||
GetResponse getResponse = client().prepareGet(dateMathExp1, "type", "1").get();
|
GetResponse getResponse = client().prepareGet(dateMathExp1, "type", "1").get();
|
||||||
assertThat(getResponse.isExists(), is(true));
|
assertThat(getResponse.isExists(), is(true));
|
||||||
@ -84,4 +87,45 @@ public class DateMathIndexExpressionsIntegrationIT extends ESIntegTestCase {
|
|||||||
assertThat(deleteResponse.getId(), equalTo("3"));
|
assertThat(deleteResponse.getId(), equalTo("3"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testAutoCreateIndexWithDateMathExpression() throws Exception {
|
||||||
|
DateTime now = new DateTime(DateTimeZone.UTC);
|
||||||
|
String index1 = ".marvel-" + DateTimeFormat.forPattern("YYYY.MM.dd").print(now);
|
||||||
|
String index2 = ".marvel-" + DateTimeFormat.forPattern("YYYY.MM.dd").print(now.minusDays(1));
|
||||||
|
String index3 = ".marvel-" + DateTimeFormat.forPattern("YYYY.MM.dd").print(now.minusDays(2));
|
||||||
|
|
||||||
|
String dateMathExp1 = "<.marvel-{now/d}>";
|
||||||
|
String dateMathExp2 = "<.marvel-{now/d-1d}>";
|
||||||
|
String dateMathExp3 = "<.marvel-{now/d-2d}>";
|
||||||
|
client().prepareIndex(dateMathExp1, "type", "1").setSource("{}").get();
|
||||||
|
client().prepareIndex(dateMathExp2, "type", "2").setSource("{}").get();
|
||||||
|
client().prepareIndex(dateMathExp3, "type", "3").setSource("{}").get();
|
||||||
|
refresh();
|
||||||
|
|
||||||
|
SearchResponse searchResponse = client().prepareSearch(dateMathExp1, dateMathExp2, dateMathExp3).get();
|
||||||
|
assertHitCount(searchResponse, 3);
|
||||||
|
assertSearchHits(searchResponse, "1", "2", "3");
|
||||||
|
|
||||||
|
IndicesStatsResponse indicesStatsResponse = client().admin().indices().prepareStats(dateMathExp1, dateMathExp2, dateMathExp3).get();
|
||||||
|
assertThat(indicesStatsResponse.getIndex(index1), notNullValue());
|
||||||
|
assertThat(indicesStatsResponse.getIndex(index2), notNullValue());
|
||||||
|
assertThat(indicesStatsResponse.getIndex(index3), notNullValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testCreateIndexWithDateMathExpression() throws Exception {
|
||||||
|
DateTime now = new DateTime(DateTimeZone.UTC);
|
||||||
|
String index1 = ".marvel-" + DateTimeFormat.forPattern("YYYY.MM.dd").print(now);
|
||||||
|
String index2 = ".marvel-" + DateTimeFormat.forPattern("YYYY.MM.dd").print(now.minusDays(1));
|
||||||
|
String index3 = ".marvel-" + DateTimeFormat.forPattern("YYYY.MM.dd").print(now.minusDays(2));
|
||||||
|
|
||||||
|
String dateMathExp1 = "<.marvel-{now/d}>";
|
||||||
|
String dateMathExp2 = "<.marvel-{now/d-1d}>";
|
||||||
|
String dateMathExp3 = "<.marvel-{now/d-2d}>";
|
||||||
|
createIndex(dateMathExp1, dateMathExp2, dateMathExp3);
|
||||||
|
|
||||||
|
ClusterState clusterState = client().admin().cluster().prepareState().get().getState();
|
||||||
|
assertThat(clusterState.metaData().index(index1), notNullValue());
|
||||||
|
assertThat(clusterState.metaData().index(index2), notNullValue());
|
||||||
|
assertThat(clusterState.metaData().index(index3), notNullValue());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user