|  | @@ -35,11 +35,13 @@ import java.util.ArrayList;
 | 
	
		
			
				|  |  |  import java.util.Arrays;
 | 
	
		
			
				|  |  |  import java.util.Comparator;
 | 
	
		
			
				|  |  |  import java.util.HashMap;
 | 
	
		
			
				|  |  | +import java.util.HashSet;
 | 
	
		
			
				|  |  |  import java.util.Iterator;
 | 
	
		
			
				|  |  |  import java.util.List;
 | 
	
		
			
				|  |  |  import java.util.Locale;
 | 
	
		
			
				|  |  |  import java.util.Map;
 | 
	
		
			
				|  |  |  import java.util.OptionalDouble;
 | 
	
		
			
				|  |  | +import java.util.Set;
 | 
	
		
			
				|  |  |  import java.util.concurrent.CountDownLatch;
 | 
	
		
			
				|  |  |  import java.util.concurrent.ExecutionException;
 | 
	
		
			
				|  |  |  import java.util.concurrent.TimeUnit;
 | 
	
	
		
			
				|  | @@ -1303,6 +1305,32 @@ public class EsqlActionIT extends AbstractEsqlIntegTestCase {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    public void testCountTextField() {
 | 
	
		
			
				|  |  | +        assertAcked(client().admin().indices().prepareCreate("test_count").setMapping("name", "type=text"));
 | 
	
		
			
				|  |  | +        int numDocs = between(10, 1000);
 | 
	
		
			
				|  |  | +        Set<String> names = new HashSet<>();
 | 
	
		
			
				|  |  | +        for (int i = 0; i < numDocs; i++) {
 | 
	
		
			
				|  |  | +            String name = "name-" + randomIntBetween(1, 100);
 | 
	
		
			
				|  |  | +            names.add(name);
 | 
	
		
			
				|  |  | +            IndexRequestBuilder indexRequest = client().prepareIndex("test_count").setSource("name", name);
 | 
	
		
			
				|  |  | +            if (randomInt(100) < 5) {
 | 
	
		
			
				|  |  | +                indexRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            indexRequest.get();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        client().admin().indices().prepareRefresh("test_count").get();
 | 
	
		
			
				|  |  | +        try (EsqlQueryResponse resp = run("FROM test_count | stats COUNT_DISTINCT(name)")) {
 | 
	
		
			
				|  |  | +            Iterator<Object> row = resp.values().next();
 | 
	
		
			
				|  |  | +            assertThat(row.next(), equalTo((long) names.size()));
 | 
	
		
			
				|  |  | +            assertFalse(row.hasNext());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        try (EsqlQueryResponse resp = run("FROM test_count | stats COUNT(name)")) {
 | 
	
		
			
				|  |  | +            Iterator<Object> row = resp.values().next();
 | 
	
		
			
				|  |  | +            assertThat(row.next(), equalTo((long) numDocs));
 | 
	
		
			
				|  |  | +            assertFalse(row.hasNext());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      private void createNestedMappingIndex(String indexName) throws IOException {
 | 
	
		
			
				|  |  |          XContentBuilder builder = JsonXContent.contentBuilder();
 | 
	
		
			
				|  |  |          builder.startObject();
 |