diff --git a/src/main/java/org/upsmf/grievance/dto/SearchDateRange.java b/src/main/java/org/upsmf/grievance/dto/SearchDateRange.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f9dac9e4756a338d2a60280bab10129bfe54440
--- /dev/null
+++ b/src/main/java/org/upsmf/grievance/dto/SearchDateRange.java
@@ -0,0 +1,14 @@
+package org.upsmf.grievance.dto;
+
+import lombok.*;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+@Builder
+public class SearchDateRange {
+    private Long to;
+    private Long from;
+}
diff --git a/src/main/java/org/upsmf/grievance/dto/SearchRequest.java b/src/main/java/org/upsmf/grievance/dto/SearchRequest.java
index 5a889cad4de77b0c5eee8cf1bd2afe25f56a7f79..38d999c93440545fb8c5110b2f1582bdc7f1ee18 100644
--- a/src/main/java/org/upsmf/grievance/dto/SearchRequest.java
+++ b/src/main/java/org/upsmf/grievance/dto/SearchRequest.java
@@ -20,9 +20,9 @@ public class SearchRequest {
 
     private List<String> status;
 
-    private String cc;
+    private Long cc;
 
-    private Timestamp date;
+    private SearchDateRange date;
 
     private Boolean isJunk;
 
diff --git a/src/main/java/org/upsmf/grievance/service/impl/SearchServiceImpl.java b/src/main/java/org/upsmf/grievance/service/impl/SearchServiceImpl.java
index 617935e08cc6c0398734aa431f6f4a5246a2b47c..08df1bfada3fb131a794a1793978add3a004a492 100644
--- a/src/main/java/org/upsmf/grievance/service/impl/SearchServiceImpl.java
+++ b/src/main/java/org/upsmf/grievance/service/impl/SearchServiceImpl.java
@@ -6,6 +6,7 @@ import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.MatchQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.index.query.RangeQueryBuilder;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.SearchHits;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
@@ -44,30 +45,29 @@ public class SearchServiceImpl implements SearchService {
     public TicketResponse search(SearchRequest searchRequest) {
         //Calculate
         String keyValue = searchRequest.getSort().keySet().iterator().next();
-        Pageable pageable = PageRequest.of(searchRequest.getPage(), searchRequest.getSize(), Sort.Direction.valueOf(searchRequest.getSort().get(keyValue).toUpperCase()),keyValue);
+        Pageable pageable = PageRequest.of(searchRequest.getPage(), searchRequest.getSize(), Sort.Direction.valueOf(searchRequest.getSort().get(keyValue).toUpperCase()), keyValue);
         Page<Ticket> page = esTicketRepository.findAll(pageable);
         return TicketResponse.builder().count(page.getTotalElements()).data(page.getContent()).build();
     }
+
     @Override
     public Map<String, Object> searchTickets(SearchRequest searchRequest) {
         //Create query for search by keyword
         SearchResponse searchResponse = null;
         String keyValue = searchRequest.getSort().keySet().iterator().next();
-        if(searchRequest.getSearchKeyword()!=null && !searchRequest.getSearchKeyword().isBlank()){
-            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
-                    .query(createTicketSearchQuery(searchRequest))
-                    .from(searchRequest.getPage())
-                    .size(searchRequest.getSize())
-                    .sort(keyValue, SortOrder.valueOf(searchRequest.getSort().get(keyValue).toUpperCase()));
+        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
+                .query(createTicketSearchQuery(searchRequest))
+                .from(searchRequest.getPage())
+                .size(searchRequest.getSize())
+                .sort(keyValue, SortOrder.valueOf(searchRequest.getSort().get(keyValue).toUpperCase()));
 
-            org.elasticsearch.action.search.SearchRequest search = new org.elasticsearch.action.search.SearchRequest("ticket");
-            search.searchType(SearchType.QUERY_THEN_FETCH);
-            search.source(searchSourceBuilder);
-            try {
-                searchResponse = esConfig.elasticsearchClient().search(search, RequestOptions.DEFAULT);
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
+        org.elasticsearch.action.search.SearchRequest search = new org.elasticsearch.action.search.SearchRequest("ticket");
+        search.searchType(SearchType.QUERY_THEN_FETCH);
+        search.source(searchSourceBuilder);
+        try {
+            searchResponse = esConfig.elasticsearchClient().search(search, RequestOptions.DEFAULT);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
         }
         Map<String, Object> response = new HashMap<>();
         List<Object> results = getDocumentsFromSearchResult(searchResponse);
@@ -88,10 +88,11 @@ public class SearchServiceImpl implements SearchService {
         }
         return documents;
     }
+
     private BoolQueryBuilder createTicketSearchQuery(SearchRequest searchRequest) {
         BoolQueryBuilder finalQuery = QueryBuilders.boolQuery();
         // search by keyword
-        if(searchRequest.getSearchKeyword() != null && !searchRequest.getSearchKeyword().isBlank()) {
+        if (searchRequest.getSearchKeyword() != null && !searchRequest.getSearchKeyword().isBlank()) {
             MatchQueryBuilder firstNameKeywordMatchQuery = QueryBuilders.matchQuery("requester_first_name", searchRequest.getSearchKeyword());
             MatchQueryBuilder phoneKeywordMatchQuery = QueryBuilders.matchQuery("requester_phone", searchRequest.getSearchKeyword());
             MatchQueryBuilder emailKeywordMatchQuery = QueryBuilders.matchQuery("requester_email", searchRequest.getSearchKeyword());
@@ -99,32 +100,48 @@ public class SearchServiceImpl implements SearchService {
             keywordSearchQuery.should(firstNameKeywordMatchQuery).should(phoneKeywordMatchQuery).should(emailKeywordMatchQuery);
             finalQuery.must(keywordSearchQuery);
         }
-        if(searchRequest.getCc() != null && !searchRequest.getCc().isBlank()) {
-            MatchQueryBuilder ccMatchQuery = QueryBuilders.matchQuery("assigned_to_id", searchRequest.getCc());
+        if (searchRequest.getDate() != null && searchRequest.getDate().getFrom() != null && searchRequest.getDate().getFrom() > 0) {
+            RangeQueryBuilder fromTimestampMatchQuery = QueryBuilders.rangeQuery("created_date_ts").gte(searchRequest.getDate().getFrom());
+            if (searchRequest.getDate().getTo() != null && searchRequest.getDate().getTo() > 0) {
+                fromTimestampMatchQuery.lt(searchRequest.getDate().getTo());
+            }
+            BoolQueryBuilder timestampSearchQuery = QueryBuilders.boolQuery();
+            timestampSearchQuery.must(fromTimestampMatchQuery);
+            finalQuery.must(timestampSearchQuery);
+        }
+
+        if (searchRequest.getFilter().get("cc") != null) {
+            MatchQueryBuilder ccMatchQuery = QueryBuilders.matchQuery("assigned_to_id", searchRequest.getFilter().get("cc"));
             BoolQueryBuilder ccSearchQuery = QueryBuilders.boolQuery();
             ccSearchQuery.must(ccMatchQuery);
             finalQuery.must(ccSearchQuery);
         }
-        if(searchRequest.getStatus() != null && !searchRequest.getStatus().isEmpty()) {
-            MatchQueryBuilder statusMatchQuery = QueryBuilders.matchQuery("status", searchRequest.getStatus());
-            BoolQueryBuilder statusSearchQuery = QueryBuilders.boolQuery();
-            statusSearchQuery.must(statusMatchQuery);
-            finalQuery.must(statusSearchQuery);
+        if (searchRequest.getFilter().get("status") != null ) {
+            List list = (List) searchRequest.getFilter().get("status");
+            if(list.size()>1) {
+                MatchQueryBuilder statusMatchQuery = null;
+                BoolQueryBuilder statusSearchQuery = QueryBuilders.boolQuery();
+                for(int i=0;i<list.size();i++){
+                    statusMatchQuery = QueryBuilders.matchQuery("status", list.get(i));
+                    statusSearchQuery.should(statusMatchQuery);
+                }
+                finalQuery.must(statusSearchQuery);
+            }
         }
-        if(searchRequest.getIsJunk() != null) {
-            MatchQueryBuilder junkMatchQuery = QueryBuilders.matchQuery("is_junk", searchRequest.getStatus());
+        if (searchRequest.getIsJunk() != null) {
+            MatchQueryBuilder junkMatchQuery = QueryBuilders.matchQuery("is_junk", searchRequest.getIsJunk());
             BoolQueryBuilder junkSearchQuery = QueryBuilders.boolQuery();
             junkSearchQuery.must(junkMatchQuery);
             finalQuery.must(junkSearchQuery);
         }
-        if(searchRequest.getPriority() != null) {
-            MatchQueryBuilder priorityMatchQuery = QueryBuilders.matchQuery("priority", searchRequest.getStatus());
+        if (searchRequest.getPriority() != null) {
+            MatchQueryBuilder priorityMatchQuery = QueryBuilders.matchQuery("priority", searchRequest.getPriority());
             BoolQueryBuilder prioritySearchQuery = QueryBuilders.boolQuery();
             prioritySearchQuery.must(priorityMatchQuery);
             finalQuery.must(prioritySearchQuery);
         }
-        if(searchRequest.getIsEscalated() != null) {
-            MatchQueryBuilder esclatedMatchQuery = QueryBuilders.matchQuery("is_escalated", searchRequest.getStatus());
+        if (searchRequest.getIsEscalated() != null) {
+            MatchQueryBuilder esclatedMatchQuery = QueryBuilders.matchQuery("is_escalated", searchRequest.getIsEscalated());
             BoolQueryBuilder esclatedSearchQuery = QueryBuilders.boolQuery();
             esclatedSearchQuery.must(esclatedMatchQuery);
             finalQuery.must(esclatedSearchQuery);