@@ -5,14 +5,8 @@ import arrow.core.raise.ensure
5
5
import arrow.core.raise.ensureNotNull
6
6
import com.jillesvangurp.jsondsl.json
7
7
import com.jillesvangurp.ktsearch.Aggregations
8
- import com.jillesvangurp.ktsearch.BulkItemCallBack
9
- import com.jillesvangurp.ktsearch.BulkResponse
10
- import com.jillesvangurp.ktsearch.OperationType
11
8
import com.jillesvangurp.ktsearch.SearchClient
12
- import com.jillesvangurp.ktsearch.bulk
13
9
import com.jillesvangurp.ktsearch.count
14
- import com.jillesvangurp.ktsearch.createIndex
15
- import com.jillesvangurp.ktsearch.deleteIndex
16
10
import com.jillesvangurp.ktsearch.parseHits
17
11
import com.jillesvangurp.ktsearch.parsedBuckets
18
12
import com.jillesvangurp.ktsearch.search
@@ -25,7 +19,6 @@ import com.jillesvangurp.searchdsls.querydsl.exists
25
19
import com.jillesvangurp.searchdsls.querydsl.nested
26
20
import com.jillesvangurp.searchdsls.querydsl.simpleQueryString
27
21
import com.jillesvangurp.searchdsls.querydsl.terms
28
- import com.jillesvangurp.serializationext.DEFAULT_JSON
29
22
import io.github.oshai.kotlinlogging.KotlinLogging
30
23
import no.java.conf.model.AggregationsNotFound
31
24
import no.java.conf.model.ApiError
@@ -42,16 +35,12 @@ import no.java.conf.model.search.YearAggregate
42
35
import no.java.conf.model.search.hasFilter
43
36
import no.java.conf.model.search.hasQuery
44
37
import no.java.conf.model.sessions.Session
45
- import no.java.conf.model.sessions.Speaker
46
- import kotlin.time.Duration.Companion.seconds
38
+ import no.java.conf.service.search.ElasticIndexer
39
+ import no.java.conf.service.search.ElasticIngester
47
40
import kotlin.time.measureTimedValue
48
41
49
42
private const val INDEX_NAME = " javazone"
50
43
51
- private const val REPLICAS = 0
52
- private const val SHARDS = 3
53
- private const val REFRESH = 10
54
-
55
44
private val logger = KotlinLogging .logger {}
56
45
57
46
enum class State {
@@ -62,6 +51,8 @@ enum class State {
62
51
63
52
class SearchService (
64
53
private val client : SearchClient ,
54
+ private val indexer : ElasticIndexer ,
55
+ private val ingester : ElasticIngester ,
65
56
private val skipIndex : Boolean ,
66
57
) {
67
58
private var readyState = State .NEW
@@ -78,30 +69,7 @@ class SearchService(
78
69
if (! skipIndex) {
79
70
logger.debug { " Creating index" }
80
71
81
- client.deleteIndex(INDEX_NAME , ignoreUnavailable = true )
82
-
83
- client.createIndex(INDEX_NAME ) {
84
- settings {
85
- replicas = REPLICAS
86
- shards = SHARDS
87
- refreshInterval = REFRESH .seconds
88
- }
89
- mappings(dynamicEnabled = false ) {
90
- text(Session ::title)
91
- text(Session ::abstract)
92
- text(Session ::intendedAudience)
93
- keyword(Session ::year)
94
- keyword(Session ::video)
95
- keyword(Session ::sessionId)
96
- keyword(Session ::format)
97
- keyword(Session ::language)
98
- nestedField(" speakers" ) {
99
- text(Speaker ::name)
100
- keyword(Speaker ::twitter)
101
- text(Speaker ::bio)
102
- }
103
- }
104
- }
72
+ indexer.recreateIndex(INDEX_NAME )
105
73
}
106
74
107
75
logger.debug { " State -> Mapped" }
@@ -121,44 +89,7 @@ class SearchService(
121
89
if (! skipIndex) {
122
90
logger.debug { " Bulk" }
123
91
124
- val itemCallBack =
125
- object : BulkItemCallBack {
126
- override fun bulkRequestFailed (
127
- e : Exception ,
128
- ops : List <Pair <String , String ?>>,
129
- ) {
130
- logger.error(e) { " Bulk failed" }
131
- }
132
-
133
- override fun itemFailed (
134
- operationType : OperationType ,
135
- item : BulkResponse .ItemDetails ,
136
- ) {
137
- logger.warn { " ${operationType.name} failed ${item.id} with ${item.status} " }
138
- }
139
-
140
- override fun itemOk (
141
- operationType : OperationType ,
142
- item : BulkResponse .ItemDetails ,
143
- ) {
144
- logger.trace {
145
- " ${operationType.name} completed ${item.id} seq ${item.seqNo} p_term ${item.primaryTerm} "
146
- }
147
- }
148
- }
149
-
150
- val timeTaken =
151
- measureTimedValue {
152
- client.bulk(callBack = itemCallBack) {
153
- sessions.forEach { session ->
154
- index(
155
- source = DEFAULT_JSON .encodeToString(Session .serializer(), session),
156
- index = INDEX_NAME ,
157
- id = session.sessionId,
158
- )
159
- }
160
- }
161
- }
92
+ val timeTaken = measureTimedValue { ingester.ingest(INDEX_NAME , sessions) }
162
93
163
94
logger.info { " Time taken to index - $timeTaken " }
164
95
} else {
0 commit comments