PageRenderTime 48ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/src/main/scala/scalastic/elasticsearch/IndexCrud.scala

https://github.com/pmanvi/scalastic
Scala | 521 lines | 453 code | 55 blank | 13 comment | 4 complexity | 3a3e2fedfe599c9279fb234617696a43 MD5 | raw file
Possible License(s): Apache-2.0
  1. package scalastic.elasticsearch
  2. import org.elasticsearch.action.support.broadcast._
  3. import org.elasticsearch.common.settings.ImmutableSettings._
  4. import org.elasticsearch.cluster.metadata._
  5. import org.elasticsearch.index.query._
  6. import org.elasticsearch.common.unit._, TimeValue._
  7. import scala.collection._, JavaConversions._
  8. import org.elasticsearch.action.admin.indices.cache.clear.ClearIndicesCacheRequestBuilder
  9. trait IndexCrud
  10. extends Exists
  11. with CreateIndex with DeleteIndex
  12. with Open with Close
  13. with Alias with Unalias
  14. with PutMapping with DeleteMapping
  15. with PutTemplate with DeleteTemplate
  16. with ClearCache
  17. with Flush
  18. with Refresh
  19. with Optimize
  20. with GatewaySnapshot
  21. with Segments
  22. with Status
  23. with Stats
  24. with UpdateSettings {
  25. self: Indexer =>
  26. }
  27. trait CreateIndex {
  28. self: Indexer =>
  29. def createIndex(
  30. index: String,
  31. //fixme: change settings to consistently be a map, or a json string
  32. settings: Map[String, String] = Map(),
  33. mappings: Map[String, String] = Map(),
  34. cause: Option[String] = None,
  35. timeout: Option[String] = None) = createIndex_send(index, settings, mappings, cause, timeout).actionGet
  36. def createIndex_send(
  37. index: String,
  38. settings: Map[String, String] = Map(),
  39. mappings: Map[String, String] = Map(),
  40. cause: Option[String] = None,
  41. timeout: Option[String] = None) = createIndex_prepare(index, settings, mappings, cause, timeout).execute
  42. def createIndex_prepare(
  43. index: String,
  44. settings: Map[String, String] = Map(),
  45. mappings: Map[String, String] = Map(),
  46. cause: Option[String] = None,
  47. timeout: Option[String] = None) = {
  48. /* method body */
  49. val request = client.admin.indices.prepareCreate(index)
  50. if (!settings.isEmpty) request.setSettings(settingsBuilder.put(settings).build())
  51. mappings foreach { case (kind, mapping) => request.addMapping(kind, mapping) }
  52. cause foreach { request.setCause(_) }
  53. timeout foreach { request.setTimeout(_) }
  54. request
  55. }
  56. }
  57. trait DeleteIndex {
  58. self: Indexer =>
  59. def deleteIndex(indices: Iterable[String] = Nil, timeout: Option[String] = None) = deleteIndex_send(indices, timeout).actionGet
  60. def deleteIndex_send(indices: Iterable[String] = Nil, timeout: Option[String] = None) = deleteIndex_prepare(indices, timeout).execute
  61. def deleteIndex_prepare(indices: Iterable[String] = Nil, timeout: Option[String] = None) = {
  62. val request = client.admin.indices.prepareDelete(indices.toArray: _*)
  63. timeout foreach { request.setTimeout(_) }
  64. request
  65. }
  66. /** caveat: if none of the indices exists, we will encounter a validation exception */
  67. def deleteIndexIfExists(indices: Iterable[String] = Nil, timeout: Option[String] = None) = deleteIndexIfExists_send(indices, timeout).actionGet
  68. def deleteIndexIfExists_send(indices: Iterable[String] = Nil, timeout: Option[String] = None) = deleteIndexIfExists_prepare(indices, timeout).execute
  69. def deleteIndexIfExists_prepare(indices: Iterable[String] = Nil, timeout: Option[String] = None) = {
  70. val existing = indices filter (exists(_).isExists)
  71. val toDelete: Iterable[String] = if (existing.isEmpty) null else existing
  72. deleteIndex_prepare(toDelete, timeout)
  73. }
  74. }
  75. trait UpdateSettings {
  76. self: Indexer =>
  77. def updateSettings(settings: String, indices: String*) = updateSettings_send(settings, indices.toArray: _*).actionGet
  78. def updateSettings_send(settings: String, indices: String*) = updateSettings_prepare(settings, indices.toArray: _*).execute
  79. def updateSettings_prepare(settings: String, indices: String*) = {
  80. val request = client.admin.indices.prepareUpdateSettings(indices.toArray: _*)
  81. request.setSettings(settingsBuilder.loadFromSource(settings).build())
  82. request
  83. }
  84. }
  85. trait Exists {
  86. self: Indexer =>
  87. def exists(indices: String*) = exists_send(indices.toArray: _*).actionGet
  88. def exists_send(indices: String*) = exists_prepare(indices.toArray: _*).execute
  89. def exists_prepare(indices: String*) = client.admin.indices.prepareExists(indices.toArray: _*)
  90. }
  91. trait Alias {
  92. self: Indexer =>
  93. def alias(
  94. indices: Iterable[String],
  95. alias: String,
  96. actions: Iterable[AliasAction] = Nil,
  97. filter: Option[FilterBuilder] = None,
  98. timeout: Option[String] = None) = alias_send(indices, alias, actions, filter, timeout).actionGet
  99. def alias_send(
  100. indices: Iterable[String],
  101. alias: String,
  102. actions: Iterable[AliasAction] = Nil,
  103. filter: Option[FilterBuilder] = None,
  104. timeout: Option[String] = None) = alias_prepare(indices, alias, actions, filter, timeout).execute
  105. def alias_prepare(
  106. indices: Iterable[String],
  107. alias: String,
  108. actions: Iterable[AliasAction] = Nil,
  109. filter: Option[FilterBuilder] = None,
  110. timeout: Option[String] = None) = {
  111. /* method body */
  112. val request = client.admin.indices.prepareAliases
  113. actions foreach { request.addAliasAction(_) }
  114. indices foreach {
  115. filter match {
  116. case Some(builder) => request.addAlias(_, alias, builder)
  117. case None => request.addAlias(_, alias)
  118. }
  119. }
  120. timeout foreach { each => request.setTimeout(parseTimeValue(each, null)) }
  121. request
  122. }
  123. }
  124. trait Unalias {
  125. self: Indexer =>
  126. def unalias(
  127. indices: Iterable[String],
  128. alias: String,
  129. timeout: Option[String] = None) = unalias_send(indices, alias, timeout).actionGet
  130. def unalias_send(
  131. indices: Iterable[String],
  132. alias: String,
  133. timeout: Option[String] = None) = unalias_prepare(indices, alias, timeout).execute
  134. def unalias_prepare(
  135. indices: Iterable[String],
  136. alias: String,
  137. timeout: Option[String] = None) = {
  138. /* method body */
  139. val request = client.admin.indices.prepareAliases
  140. indices foreach { request.removeAlias(_, alias) }
  141. timeout foreach { each => request.setTimeout(parseTimeValue(each, null)) }
  142. request
  143. }
  144. }
  145. trait Optimize {
  146. self: Indexer =>
  147. def optimize(
  148. indices: Iterable[String] = Nil,
  149. flush: Option[Boolean] = None,
  150. listenerThreaded: Option[Boolean] = None,
  151. maxNumSegments: Option[Int] = None,
  152. onlyExpungeDeletes: Option[Boolean] = None,
  153. operationThreading: Option[BroadcastOperationThreading] = None,
  154. refresh: Option[Boolean] = None,
  155. waitForMerge: Option[Boolean] = None) =
  156. optimize_send(indices, flush, listenerThreaded, maxNumSegments, onlyExpungeDeletes, operationThreading, refresh, waitForMerge).actionGet
  157. def optimize_send(
  158. indices: Iterable[String] = Nil,
  159. flush: Option[Boolean] = None,
  160. listenerThreaded: Option[Boolean] = None,
  161. maxNumSegments: Option[Int] = None,
  162. onlyExpungeDeletes: Option[Boolean] = None,
  163. operationThreading: Option[BroadcastOperationThreading] = None,
  164. refresh: Option[Boolean] = None,
  165. waitForMerge: Option[Boolean] = None) =
  166. optimize_prepare(indices, flush, listenerThreaded, maxNumSegments, onlyExpungeDeletes, operationThreading, refresh, waitForMerge).execute
  167. def optimize_prepare(
  168. indices: Iterable[String] = Nil,
  169. flush: Option[Boolean] = None,
  170. listenerThreaded: Option[Boolean] = None,
  171. maxNumSegments: Option[Int] = None,
  172. onlyExpungeDeletes: Option[Boolean] = None,
  173. operationThreading: Option[BroadcastOperationThreading] = None,
  174. refresh: Option[Boolean] = None,
  175. waitForMerge: Option[Boolean] = None) = {
  176. /* method body */
  177. val request = client.admin.indices.prepareOptimize(indices.toArray: _*)
  178. flush foreach { request.setFlush(_) }
  179. listenerThreaded foreach { request.setListenerThreaded(_) }
  180. maxNumSegments foreach { request.setMaxNumSegments(_) }
  181. onlyExpungeDeletes foreach { request.setOnlyExpungeDeletes(_) }
  182. operationThreading foreach { request.setOperationThreading(_) }
  183. refresh foreach { request.setRefresh(_) }
  184. waitForMerge foreach { request.setWaitForMerge(_) }
  185. request
  186. }
  187. }
  188. trait Flush {
  189. self: Indexer =>
  190. def flush(
  191. indices: Iterable[String] = Nil,
  192. full: Option[Boolean] = None,
  193. refresh: Option[Boolean] = None) = flush_send(indices, full, refresh).actionGet
  194. def flush_send(
  195. indices: Iterable[String] = Nil,
  196. full: Option[Boolean] = None,
  197. refresh: Option[Boolean] = None) = flush_prepare(indices, full, refresh).execute
  198. def flush_prepare(
  199. indices: Iterable[String] = Nil,
  200. full: Option[Boolean] = None,
  201. refresh: Option[Boolean] = None) = {
  202. /* method body */
  203. val request = client.admin.indices.prepareFlush(indices.toArray: _*)
  204. full foreach { request.setFull(_) }
  205. refresh foreach { request.setRefresh(_) }
  206. request
  207. }
  208. }
  209. trait Refresh {
  210. self: Indexer =>
  211. def refresh(
  212. indices: Iterable[String] = Nil,
  213. listenerThreaded: Option[Boolean] = None,
  214. operationThreading: Option[BroadcastOperationThreading] = None,
  215. waitForOperations: Option[Boolean] = None) = refresh_send(indices, listenerThreaded, operationThreading, waitForOperations).actionGet
  216. def refresh_send(
  217. indices: Iterable[String] = Nil,
  218. listenerThreaded: Option[Boolean] = None,
  219. operationThreading: Option[BroadcastOperationThreading] = None,
  220. waitForOperations: Option[Boolean] = None) = refresh_prepare(indices, listenerThreaded, operationThreading, waitForOperations).execute
  221. def refresh_prepare(
  222. indices: Iterable[String] = Nil,
  223. listenerThreaded: Option[Boolean] = None,
  224. operationThreading: Option[BroadcastOperationThreading] = None,
  225. waitForOperations: Option[Boolean] = None) = {
  226. /* method body */
  227. val request = client.admin.indices.prepareRefresh(indices.toArray: _*)
  228. listenerThreaded foreach { request.setListenerThreaded(_) }
  229. operationThreading foreach { request.setOperationThreading(_) }
  230. waitForOperations foreach { request.setWaitForOperations(_) }
  231. request
  232. }
  233. }
  234. trait Status {
  235. self: Indexer =>
  236. def status(indices: Iterable[String] = Nil, recovery: Option[Boolean] = None, snapshot: Option[Boolean] = None) = status_send(indices, recovery, snapshot).actionGet
  237. def status_send(indices: Iterable[String] = Nil, recovery: Option[Boolean] = None, snapshot: Option[Boolean] = None) = status_prepare(indices, recovery, snapshot).execute
  238. def status_prepare(indices: Iterable[String] = Nil, recovery: Option[Boolean] = None, snapshot: Option[Boolean] = None) = {
  239. /* method body */
  240. val request = client.admin.indices.prepareStatus(indices.toArray: _*)
  241. recovery foreach { request.setRecovery(_) }
  242. snapshot foreach { request.setSnapshot(_) }
  243. request
  244. }
  245. }
  246. trait Stats {
  247. self: Indexer =>
  248. def stats(
  249. indices: Iterable[String] = Nil,
  250. docs: Option[Boolean] = None,
  251. flush: Option[Boolean] = None,
  252. get: Option[Boolean] = None,
  253. groups: Iterable[String] = Nil,
  254. indexing: Option[Boolean] = None,
  255. merge: Option[Boolean] = None,
  256. refresh: Option[Boolean] = None,
  257. search: Option[Boolean] = None,
  258. store: Option[Boolean] = None,
  259. types: Iterable[String] = Nil) = stats_send(indices, docs, flush, get, groups, indexing, merge, refresh, search, store, types).actionGet
  260. def stats_send(
  261. indices: Iterable[String] = Nil,
  262. docs: Option[Boolean] = None,
  263. flush: Option[Boolean] = None,
  264. get: Option[Boolean] = None,
  265. groups: Iterable[String] = Nil,
  266. indexing: Option[Boolean] = None,
  267. merge: Option[Boolean] = None,
  268. refresh: Option[Boolean] = None,
  269. search: Option[Boolean] = None,
  270. store: Option[Boolean] = None,
  271. types: Iterable[String] = Nil) = stats_prepare(indices, docs, flush, get, groups, indexing, merge, refresh, search, store, types).execute
  272. def stats_prepare(
  273. indices: Iterable[String] = Nil,
  274. docs: Option[Boolean] = None,
  275. flush: Option[Boolean] = None,
  276. get: Option[Boolean] = None,
  277. groups: Iterable[String] = Nil,
  278. indexing: Option[Boolean] = None,
  279. merge: Option[Boolean] = None,
  280. refresh: Option[Boolean] = None,
  281. search: Option[Boolean] = None,
  282. store: Option[Boolean] = None,
  283. types: Iterable[String] = Nil) = {
  284. /* method body */
  285. val request = client.admin.indices.prepareStats(indices.toArray: _*)
  286. docs foreach { request.setDocs(_) }
  287. flush foreach { request.setFlush(_) }
  288. get foreach { request.setGet(_) }
  289. request.setGroups(groups.toArray: _*)
  290. indexing foreach { request.setIndexing(_) }
  291. merge foreach { request.setMerge(_) }
  292. refresh foreach { request.setRefresh(_) }
  293. search foreach { request.setSearch(_) }
  294. store foreach { request.setStore(_) }
  295. request.setTypes(types.toArray: _*)
  296. request
  297. }
  298. }
  299. trait PutMapping {
  300. self: Indexer =>
  301. def putMapping(index: String, `type`: String, source: String, ignoreConflicts: Option[Boolean] = None, timeout: Option[String] = None) =
  302. putMappingForAll(Seq(index), `type`, source, ignoreConflicts, timeout)
  303. def putMapping_send(index: String, `type`: String, source: String, ignoreConflicts: Option[Boolean] = None, timeout: Option[String] = None) =
  304. putMappingForAll_send(Seq(index), `type`, source, ignoreConflicts, timeout)
  305. def putMapping_prepare(index: String, `type`: String, source: String, ignoreConflicts: Option[Boolean] = None, timeout: Option[String] = None) =
  306. putMappingForAll_prepare(Seq(index), `type`, source, ignoreConflicts, timeout)
  307. def putMappingForAll(indices: Iterable[String], `type`: String, source: String, ignoreConflicts: Option[Boolean] = None, timeout: Option[String] = None) =
  308. putMappingForAll_send(indices, `type`, source, ignoreConflicts, timeout).actionGet
  309. def putMappingForAll_send(indices: Iterable[String], `type`: String, source: String, ignoreConflicts: Option[Boolean] = None, timeout: Option[String] = None) =
  310. putMappingForAll_prepare(indices, `type`, source, ignoreConflicts, timeout).execute
  311. def putMappingForAll_prepare(indices: Iterable[String], `type`: String, source: String, ignoreConflicts: Option[Boolean] = None, timeout: Option[String] = None) = {
  312. val request = client.admin.indices.preparePutMapping(indices.toArray: _*)
  313. request.setType(`type`)
  314. request.setSource(source)
  315. ignoreConflicts foreach { request.setIgnoreConflicts(_) }
  316. timeout foreach { request.setTimeout(_) }
  317. request
  318. }
  319. }
  320. trait DeleteMapping {
  321. self: Indexer =>
  322. def deleteMapping(
  323. indices: Iterable[String] = Nil,
  324. `type`: Option[String] = None,
  325. timeout: Option[String] = None) = deleteMapping_send(indices, `type`, timeout).actionGet
  326. def deleteMapping_send(
  327. indices: Iterable[String] = Nil,
  328. `type`: Option[String] = None,
  329. timeout: Option[String] = None) = deleteMapping_prepare(indices, `type`, timeout).execute
  330. def deleteMapping_prepare(
  331. indices: Iterable[String] = Nil,
  332. `type`: Option[String] = None,
  333. timeout: Option[String] = None) = {
  334. /* method body */
  335. val request = client.admin.indices.prepareDeleteMapping(indices.toArray: _*)
  336. `type` foreach { request.setType(_) }
  337. timeout foreach { each => request.setMasterNodeTimeout(parseTimeValue(each, null)) }
  338. request
  339. }
  340. }
  341. trait PutTemplate {
  342. self: Indexer =>
  343. def putTemplate(
  344. name: String,
  345. settings: Map[String, String] = Map(),
  346. mappings: Map[String, String] = Map(),
  347. cause: Option[String] = None,
  348. create: Option[Boolean] = None,
  349. order: Option[Int] = None,
  350. source: Option[String] = None,
  351. template: Option[String] = None,
  352. timeout: Option[String] = None) =
  353. putTemplate_send(name, settings, mappings, cause, create, order, source, template, timeout).actionGet
  354. def putTemplate_send(
  355. name: String,
  356. settings: Map[String, String] = Map(),
  357. mappings: Map[String, String] = Map(),
  358. cause: Option[String] = None,
  359. create: Option[Boolean] = None,
  360. order: Option[Int] = None,
  361. source: Option[String] = None,
  362. template: Option[String] = None,
  363. timeout: Option[String] = None) =
  364. putTemplate_prepare(name, settings, mappings, cause, create, order, source, template, timeout).execute
  365. def putTemplate_prepare(
  366. name: String,
  367. settings: Map[String, String] = Map(),
  368. mappings: Map[String, String] = Map(),
  369. cause: Option[String] = None,
  370. create: Option[Boolean] = None,
  371. order: Option[Int] = None,
  372. source: Option[String] = None,
  373. template: Option[String] = None,
  374. timeout: Option[String] = None) = {
  375. /* method body */
  376. val request = client.admin.indices.preparePutTemplate(name)
  377. if (!settings.isEmpty) request.setSettings(settingsBuilder.put(settings).build())
  378. mappings foreach { case (kind, mapping) => request.addMapping(kind, mapping) }
  379. cause foreach { request.cause(_) }
  380. create foreach { request.setCreate(_) }
  381. order foreach { request.setOrder(_) }
  382. source foreach { request.setSource(_) }
  383. template foreach { request.setTemplate(_) }
  384. timeout foreach { request.setTimeout(_) }
  385. request
  386. }
  387. }
  388. trait DeleteTemplate {
  389. self: Indexer =>
  390. def deleteTemplate(name: String, timeout: Option[String] = None) = deleteTemplate_send(name, timeout).actionGet
  391. def deleteTemplate_send(name: String, timeout: Option[String] = None) = deleteTemplate_prepare(name, timeout).execute
  392. def deleteTemplate_prepare(name: String, timeout: Option[String] = None) = {
  393. val request = client.admin.indices.prepareDeleteTemplate(name)
  394. timeout foreach { request.setTimeout(_) }
  395. request
  396. }
  397. }
  398. trait Open {
  399. self: Indexer =>
  400. def openIndex(index: String, timeout: Option[String] = None) = openIndex_send(index, timeout).actionGet
  401. def openIndex_send(index: String, timeout: Option[String] = None) = openIndex_prepare(index, timeout).execute
  402. def openIndex_prepare(index: String, timeout: Option[String] = None) = {
  403. val request = client.admin.indices.prepareOpen(index)
  404. timeout foreach { request.setTimeout(_) }
  405. request
  406. }
  407. }
  408. trait Close {
  409. self: Indexer =>
  410. def closeIndex(index: String, timeout: Option[String] = None) = closeIndex_send(index, timeout).actionGet
  411. def closeIndex_send(index: String, timeout: Option[String] = None) = closeIndex_prepare(index, timeout).execute
  412. def closeIndex_prepare(index: String, timeout: Option[String] = None) = {
  413. val request = client.admin.indices.prepareClose(index)
  414. timeout foreach { request.setTimeout(_) }
  415. request
  416. }
  417. }
  418. trait GatewaySnapshot {
  419. self: Indexer =>
  420. def gatewaySnapshot(indices: String*) = gatewaySnapshot_send(indices.toArray: _*).actionGet
  421. def gatewaySnapshot_send(indices: String*) = gatewaySnapshot_prepare(indices.toArray: _*).execute
  422. def gatewaySnapshot_prepare(indices: String*) = client.admin.indices.prepareGatewaySnapshot(indices.toArray: _*)
  423. }
  424. trait Segments {
  425. self: Indexer =>
  426. def segments(indices: String*) = segments_send(indices.toArray: _*).actionGet
  427. def segments_send(indices: String*) = segments_prepare(indices.toArray: _*).execute
  428. def segments_prepare(indices: String*) = client.admin.indices.prepareSegments(indices.toArray: _*)
  429. }
  430. trait ClearCache {
  431. self: Indexer =>
  432. def clearCache(
  433. indices: Iterable[String] = Nil,
  434. fields: Iterable[String] = Nil,
  435. fieldDataCache: Option[Boolean] = None,
  436. filterCache: Option[Boolean] = None,
  437. idCache: Option[Boolean] = None,
  438. listenerThreaded: Option[Boolean] = None,
  439. operationThreading: Option[BroadcastOperationThreading] = None) = clearCache_send(indices, fields, fieldDataCache, filterCache, idCache, listenerThreaded, operationThreading).actionGet
  440. def clearCache_send(
  441. indices: Iterable[String] = Nil,
  442. fields: Iterable[String] = Nil,
  443. fieldDataCache: Option[Boolean] = None,
  444. filterCache: Option[Boolean] = None,
  445. idCache: Option[Boolean] = None,
  446. listenerThreaded: Option[Boolean] = None,
  447. operationThreading: Option[BroadcastOperationThreading] = None) = clearCache_prepare(indices, fields, fieldDataCache, filterCache, idCache, listenerThreaded, operationThreading).execute
  448. def clearCache_prepare(
  449. indices: Iterable[String] = Nil,
  450. fields: Iterable[String] = Nil,
  451. fieldDataCache: Option[Boolean] = None,
  452. filterCache: Option[Boolean] = None,
  453. idCache: Option[Boolean] = None,
  454. listenerThreaded: Option[Boolean] = None,
  455. operationThreading: Option[BroadcastOperationThreading] = None): ClearIndicesCacheRequestBuilder = {
  456. /* method body */
  457. val request = client.admin.indices.prepareClearCache(indices.toArray: _*)
  458. request.setFields(fields.toArray: _*)
  459. fieldDataCache foreach { request.setFieldDataCache(_) }
  460. filterCache foreach { request.setFilterCache(_) }
  461. idCache foreach { request.setIdCache(_) }
  462. listenerThreaded foreach { request.setListenerThreaded(_) }
  463. operationThreading foreach { request.setOperationThreading(_) }
  464. request
  465. }
  466. }