Skip to content
GitLab
Explore
Projects
Groups
Topics
Snippets
Projects
Groups
Topics
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Register
Sign in
Toggle navigation
Menu
UPSMF
Grievance
Commits
e70bfa18
Unverified
Commit
e70bfa18
authored
1 year ago
by
Shishir Suman
Committed by
GitHub
1 year ago
Browse files
Options
Download
Plain Diff
Merge pull request #4 from rahulbowade/main
Changes related to elastic search for tickets
parents
f725ba1a
cd909455
main
Escalate_ticket_send_mail_to_raiser
UAT
UPHRH_7903_mobile_otp
UPHRH_quartz_scheduler
Velocity_template_changes
admin_config_changes
bug_fixes_01_11
github/fork/vky25/patch-1
rahu_test
shishir-bug-fixes
shishir_dynamic_schedular
shishir_ticket_statistics_by_user
user_management
No related merge requests found
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
pom.xml
+10
-0
pom.xml
src/main/java/org/upsmf/grievance/controller/SearchTicketController.java
+7
-2
...rg/upsmf/grievance/controller/SearchTicketController.java
src/main/java/org/upsmf/grievance/dto/SearchRequest.java
+2
-0
src/main/java/org/upsmf/grievance/dto/SearchRequest.java
src/main/java/org/upsmf/grievance/service/SearchService.java
+2
-2
src/main/java/org/upsmf/grievance/service/SearchService.java
src/main/java/org/upsmf/grievance/service/impl/SearchServiceImpl.java
+101
-0
...a/org/upsmf/grievance/service/impl/SearchServiceImpl.java
with
122 additions
and
4 deletions
+122
-4
pom.xml
+
10
−
0
View file @
e70bfa18
...
...
@@ -59,6 +59,16 @@
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-elasticsearch
</artifactId>
</dependency>
<dependency>
<groupId>
org.elasticsearch
</groupId>
<artifactId>
elasticsearch
</artifactId>
<version>
7.17.12
</version>
</dependency>
<dependency>
<groupId>
org.elasticsearch.client
</groupId>
<artifactId>
elasticsearch-rest-high-level-client
</artifactId>
<version>
7.17.12
</version>
<!-- Use the appropriate version -->
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-redis
</artifactId>
...
...
This diff is collapsed.
Click to expand it.
src/main/java/org/upsmf/grievance/controller/SearchTicketController.java
+
7
−
2
View file @
e70bfa18
...
...
@@ -8,12 +8,11 @@ import org.springframework.web.bind.annotation.PostMapping;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.upsmf.grievance.dto.SearchRequest
;
import
org.upsmf.grievance.model.es.Ticket
;
import
org.upsmf.grievance.model.reponse.Response
;
import
org.upsmf.grievance.model.reponse.TicketResponse
;
import
org.upsmf.grievance.service.SearchService
;
import
java.util.
Optional
;
import
java.util.
Map
;
@Controller
@RequestMapping
(
"/search"
)
...
...
@@ -28,5 +27,11 @@ public class SearchTicketController {
Response
response
=
new
Response
(
HttpStatus
.
OK
.
value
(),
responseTicket
);
return
new
ResponseEntity
<>(
response
,
HttpStatus
.
OK
);
}
@PostMapping
(
"/searchTickets"
)
public
ResponseEntity
<
Response
>
searchTickets
(
@RequestBody
SearchRequest
searchRequest
){
Map
<
String
,
Object
>
responseTicket
=
searchService
.
searchTickets
(
searchRequest
);
Response
response
=
new
Response
(
HttpStatus
.
OK
.
value
(),
responseTicket
);
return
new
ResponseEntity
<>(
response
,
HttpStatus
.
OK
);
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
src/main/java/org/upsmf/grievance/dto/SearchRequest.java
+
2
−
0
View file @
e70bfa18
...
...
@@ -26,6 +26,8 @@ public class SearchRequest {
private
Boolean
isJunk
;
private
Boolean
isEscalated
;
private
TicketPriority
priority
;
private
int
page
;
...
...
This diff is collapsed.
Click to expand it.
src/main/java/org/upsmf/grievance/service/SearchService.java
+
2
−
2
View file @
e70bfa18
package
org.upsmf.grievance.service
;
import
org.upsmf.grievance.model.es.Ticket
;
import
org.upsmf.grievance.dto.SearchRequest
;
import
org.upsmf.grievance.model.reponse.TicketResponse
;
import
java.util.
Optional
;
import
java.util.
Map
;
public
interface
SearchService
{
TicketResponse
search
(
SearchRequest
searchRequest
);
Map
<
String
,
Object
>
searchTickets
(
SearchRequest
searchRequest
);
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
src/main/java/org/upsmf/grievance/service/impl/SearchServiceImpl.java
+
101
−
0
View file @
e70bfa18
package
org.upsmf.grievance.service.impl
;
import
org.elasticsearch.action.search.SearchResponse
;
import
org.elasticsearch.action.search.SearchType
;
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.search.SearchHit
;
import
org.elasticsearch.search.SearchHits
;
import
org.elasticsearch.search.builder.SearchSourceBuilder
;
import
org.elasticsearch.search.sort.SortOrder
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.domain.Page
;
...
...
@@ -7,12 +17,19 @@ import org.springframework.data.domain.PageRequest;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.stereotype.Service
;
import
org.upsmf.grievance.config.EsConfig
;
import
org.upsmf.grievance.dto.SearchRequest
;
import
org.upsmf.grievance.model.es.Ticket
;
import
org.upsmf.grievance.model.reponse.TicketResponse
;
import
org.upsmf.grievance.repository.es.TicketRepository
;
import
org.upsmf.grievance.service.SearchService
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@Service
public
class
SearchServiceImpl
implements
SearchService
{
...
...
@@ -20,6 +37,8 @@ public class SearchServiceImpl implements SearchService {
private
int
defaultPageSize
;
@Autowired
private
TicketRepository
esTicketRepository
;
@Autowired
private
EsConfig
esConfig
;
@Override
public
TicketResponse
search
(
SearchRequest
searchRequest
)
{
...
...
@@ -29,5 +48,87 @@ public class SearchServiceImpl implements SearchService {
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
()));
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
);
response
.
put
(
"count"
,
searchResponse
.
getHits
().
getTotalHits
().
value
);
response
.
put
(
"results"
,
results
);
return
response
;
}
private
static
List
<
Object
>
getDocumentsFromSearchResult
(
SearchResponse
result
)
{
SearchHits
hits
=
result
.
getHits
();
return
getDocumentsFromHits
(
hits
);
}
private
static
List
<
Object
>
getDocumentsFromHits
(
SearchHits
hits
)
{
List
<
Object
>
documents
=
new
ArrayList
<
Object
>();
for
(
SearchHit
hit
:
hits
)
{
documents
.
add
(
hit
.
getSourceAsMap
());
}
return
documents
;
}
private
BoolQueryBuilder
createTicketSearchQuery
(
SearchRequest
searchRequest
)
{
BoolQueryBuilder
finalQuery
=
QueryBuilders
.
boolQuery
();
// search by keyword
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
());
BoolQueryBuilder
keywordSearchQuery
=
QueryBuilders
.
boolQuery
();
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
());
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
.
getIsJunk
()
!=
null
)
{
MatchQueryBuilder
junkMatchQuery
=
QueryBuilders
.
matchQuery
(
"is_junk"
,
searchRequest
.
getStatus
());
BoolQueryBuilder
junkSearchQuery
=
QueryBuilders
.
boolQuery
();
junkSearchQuery
.
must
(
junkMatchQuery
);
finalQuery
.
must
(
junkSearchQuery
);
}
if
(
searchRequest
.
getPriority
()
!=
null
)
{
MatchQueryBuilder
priorityMatchQuery
=
QueryBuilders
.
matchQuery
(
"priority"
,
searchRequest
.
getStatus
());
BoolQueryBuilder
prioritySearchQuery
=
QueryBuilders
.
boolQuery
();
prioritySearchQuery
.
must
(
priorityMatchQuery
);
finalQuery
.
must
(
prioritySearchQuery
);
}
if
(
searchRequest
.
getIsEscalated
()
!=
null
)
{
MatchQueryBuilder
esclatedMatchQuery
=
QueryBuilders
.
matchQuery
(
"is_escalated"
,
searchRequest
.
getStatus
());
BoolQueryBuilder
esclatedSearchQuery
=
QueryBuilders
.
boolQuery
();
esclatedSearchQuery
.
must
(
esclatedMatchQuery
);
finalQuery
.
must
(
esclatedSearchQuery
);
}
return
finalQuery
;
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Topics
Snippets