@@ -7,6 +7,7 @@ package org.opensearch.indexmanagement.rollup.interceptor
7
7
8
8
import org.apache.http.entity.ContentType
9
9
import org.apache.http.entity.StringEntity
10
+ import org.junit.Assert
10
11
import org.opensearch.client.ResponseException
11
12
import org.opensearch.indexmanagement.common.model.dimension.DateHistogram
12
13
import org.opensearch.indexmanagement.common.model.dimension.Terms
@@ -1710,4 +1711,169 @@ class RollupInterceptorIT : RollupRestTestCase() {
1710
1711
assertTrue(" The query_string query field check failed!" , e.message!! .contains(" Could not find a rollup job that can answer this query because [missing field unknown_field]" ))
1711
1712
}
1712
1713
}
1714
+
1715
+ fun `test roll up search query_string query with index pattern as source` () {
1716
+ val sourceIndex = " source_111_rollup_search_qsq_98243"
1717
+ val targetIndex = " target_rollup_qsq_search_98243"
1718
+
1719
+ createSampleIndexForQSQTest(sourceIndex)
1720
+
1721
+ val rollup = Rollup (
1722
+ id = " basic_query_string_query_rollup_search98243" ,
1723
+ enabled = true ,
1724
+ schemaVersion = 1L ,
1725
+ jobSchedule = IntervalSchedule (Instant .now(), 1 , ChronoUnit .MINUTES ),
1726
+ jobLastUpdatedTime = Instant .now(),
1727
+ jobEnabledTime = Instant .now(),
1728
+ description = " basic search test" ,
1729
+ sourceIndex = " source_111*" ,
1730
+ targetIndex = targetIndex,
1731
+ metadataID = null ,
1732
+ roles = emptyList(),
1733
+ pageSize = 10 ,
1734
+ delay = 0 ,
1735
+ continuous = false ,
1736
+ dimensions = listOf (
1737
+ DateHistogram (sourceField = " event_ts" , fixedInterval = " 1h" ),
1738
+ Terms (" state" , " state" ),
1739
+ Terms (" state_ext" , " state_ext" ),
1740
+ Terms (" state_ext2" , " state_ext2" ),
1741
+ Terms (" state_ordinal" , " state_ordinal" ),
1742
+ Terms (" abc test" , " abc test" ),
1743
+ ),
1744
+ metrics = listOf (
1745
+ RollupMetrics (
1746
+ sourceField = " earnings" , targetField = " earnings" ,
1747
+ metrics = listOf (
1748
+ Sum (), Min (), Max (),
1749
+ ValueCount (), Average ()
1750
+ )
1751
+ )
1752
+ )
1753
+ ).let { createRollup(it, it.id) }
1754
+
1755
+ updateRollupStartTime(rollup)
1756
+
1757
+ waitFor {
1758
+ val rollupJob = getRollup(rollupId = rollup.id)
1759
+ assertNotNull(" Rollup job doesn't have metadata set" , rollupJob.metadataID)
1760
+ val rollupMetadata = getRollupMetadata(rollupJob.metadataID!! )
1761
+ assertEquals(" Rollup is not finished" , RollupMetadata .Status .FINISHED , rollupMetadata.status)
1762
+ }
1763
+
1764
+ refreshAllIndices()
1765
+
1766
+ // Term query
1767
+ var req = """
1768
+ {
1769
+ "size": 0,
1770
+ "query": {
1771
+ "query_string": {
1772
+ "query": "state:TX AND state_ext:CA AND 0",
1773
+ "default_field": "state_ordinal"
1774
+ }
1775
+
1776
+ },
1777
+ "aggs": {
1778
+ "earnings_total": {
1779
+ "sum": {
1780
+ "field": "earnings"
1781
+ }
1782
+ }
1783
+ }
1784
+ }
1785
+ """ .trimIndent()
1786
+ var rawRes = client().makeRequest(" POST" , " /$sourceIndex /_search" , emptyMap(), StringEntity (req, ContentType .APPLICATION_JSON ))
1787
+ assertTrue(rawRes.restStatus() == RestStatus .OK )
1788
+ var rollupRes = client().makeRequest(" POST" , " /$targetIndex /_search" , emptyMap(), StringEntity (req, ContentType .APPLICATION_JSON ))
1789
+ assertTrue(rollupRes.restStatus() == RestStatus .OK )
1790
+ var rawAggRes = rawRes.asMap()[" aggregations" ] as Map <String , Map <String , Any >>
1791
+ var rollupAggRes = rollupRes.asMap()[" aggregations" ] as Map <String , Map <String , Any >>
1792
+ assertEquals(
1793
+ " Source and rollup index did not return same min results" ,
1794
+ rawAggRes.getValue(" earnings_total" )[" value" ],
1795
+ rollupAggRes.getValue(" earnings_total" )[" value" ]
1796
+ )
1797
+ }
1798
+
1799
+ fun `test roll up search query_string query with index pattern as source deleted` () {
1800
+ val sourceIndex = " source_999_rollup_search_qsq_982439"
1801
+ val targetIndex = " target_rollup_qsq_search_982439"
1802
+
1803
+ createSampleIndexForQSQTest(sourceIndex)
1804
+
1805
+ val rollup = Rollup (
1806
+ id = " basic_query_string_query_rollup_search982499" ,
1807
+ enabled = true ,
1808
+ schemaVersion = 1L ,
1809
+ jobSchedule = IntervalSchedule (Instant .now(), 1 , ChronoUnit .MINUTES ),
1810
+ jobLastUpdatedTime = Instant .now(),
1811
+ jobEnabledTime = Instant .now(),
1812
+ description = " basic search test" ,
1813
+ sourceIndex = " source_999*" ,
1814
+ targetIndex = targetIndex,
1815
+ metadataID = null ,
1816
+ roles = emptyList(),
1817
+ pageSize = 10 ,
1818
+ delay = 0 ,
1819
+ continuous = false ,
1820
+ dimensions = listOf (
1821
+ DateHistogram (sourceField = " event_ts" , fixedInterval = " 1h" ),
1822
+ Terms (" state" , " state" ),
1823
+ Terms (" state_ext" , " state_ext" ),
1824
+ Terms (" state_ext2" , " state_ext2" ),
1825
+ Terms (" state_ordinal" , " state_ordinal" ),
1826
+ Terms (" abc test" , " abc test" ),
1827
+ ),
1828
+ metrics = listOf (
1829
+ RollupMetrics (
1830
+ sourceField = " earnings" , targetField = " earnings" ,
1831
+ metrics = listOf (
1832
+ Sum (), Min (), Max (),
1833
+ ValueCount (), Average ()
1834
+ )
1835
+ )
1836
+ )
1837
+ ).let { createRollup(it, it.id) }
1838
+
1839
+ updateRollupStartTime(rollup)
1840
+
1841
+ waitFor {
1842
+ val rollupJob = getRollup(rollupId = rollup.id)
1843
+ assertNotNull(" Rollup job doesn't have metadata set" , rollupJob.metadataID)
1844
+ val rollupMetadata = getRollupMetadata(rollupJob.metadataID!! )
1845
+ assertEquals(" Rollup is not finished" , RollupMetadata .Status .FINISHED , rollupMetadata.status)
1846
+ }
1847
+
1848
+ refreshAllIndices()
1849
+
1850
+ deleteIndex(sourceIndex)
1851
+
1852
+ // Term query
1853
+ var req = """
1854
+ {
1855
+ "size": 0,
1856
+ "query": {
1857
+ "query_string": {
1858
+ "query": "state:TX AND state_ext:CA AND 0",
1859
+ "default_field": "state_ordinal"
1860
+ }
1861
+
1862
+ },
1863
+ "aggs": {
1864
+ "earnings_total": {
1865
+ "sum": {
1866
+ "field": "earnings"
1867
+ }
1868
+ }
1869
+ }
1870
+ }
1871
+ """ .trimIndent()
1872
+ try {
1873
+ client().makeRequest(" POST" , " /$targetIndex /_search" , emptyMap(), StringEntity (req, ContentType .APPLICATION_JSON ))
1874
+ fail(" Failure was expected when searching rollup index using qsq query when sourceIndex does not exist!" )
1875
+ } catch (e: ResponseException ) {
1876
+ Assert .assertTrue(e.message!! .contains(" Can't parse query_string query without sourceIndex mappings!" ))
1877
+ }
1878
+ }
1713
1879
}
0 commit comments