PageRenderTime 53ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 1ms

/src/main/scala/scalastic/elasticsearch/Indexing.scala

https://github.com/pmanvi/scalastic
Scala | 438 lines | 398 code | 32 blank | 8 comment | 3 complexity | 21ffda1d119b5ed4d71428271f4869b8 MD5 | raw file
Possible License(s): Apache-2.0
  1. package scalastic.elasticsearch
  2. import org.elasticsearch.common._, xcontent._
  3. import org.elasticsearch.index.VersionType
  4. import org.elasticsearch.index.query._, QueryBuilders._
  5. import org.elasticsearch.action._, get._, index._, delete._
  6. import org.elasticsearch.action.support.broadcast._
  7. import org.elasticsearch.action.support.replication._
  8. import scala.collection._, JavaConversions._
  9. trait Indexing
  10. extends Index
  11. with Bulk
  12. with Searching
  13. with Count
  14. with Get
  15. with Multiget
  16. with Delete
  17. with DeleteByQuery {
  18. self: Indexer =>
  19. }
  20. trait Index {
  21. self: Indexer =>
  22. def index(
  23. index: String,
  24. `type`: String,
  25. @Nullable id: String,
  26. source: String,
  27. parent: String = null,
  28. consistencyLevel: Option[WriteConsistencyLevel] = None,
  29. contentType: Option[XContentType] = None,
  30. create: Option[Boolean] = None,
  31. listenerThreaded: Option[Boolean] = None,
  32. operationThreaded: Option[Boolean] = None,
  33. opType: Option[IndexRequest.OpType] = None,
  34. percolate: Option[String] = None,
  35. refresh: Option[Boolean] = None,
  36. replicationType: Option[ReplicationType] = None,
  37. routing: Option[String] = None,
  38. timeout: Option[String] = None,
  39. timestamp: Option[String] = None,
  40. ttl: Option[Long] = None,
  41. version: Option[Long] = None,
  42. versionType: Option[VersionType] = None) = index_send(index, `type`, id, source, parent, consistencyLevel, contentType, create, listenerThreaded, operationThreaded, opType, percolate, refresh, replicationType, routing, timeout, timestamp, ttl, version, versionType).actionGet
  43. def index_send(
  44. index: String,
  45. `type`: String,
  46. @Nullable id: String,
  47. source: String,
  48. parent: String = null,
  49. consistencyLevel: Option[WriteConsistencyLevel] = None,
  50. contentType: Option[XContentType] = None,
  51. create: Option[Boolean] = None,
  52. listenerThreaded: Option[Boolean] = None,
  53. operationThreaded: Option[Boolean] = None,
  54. opType: Option[IndexRequest.OpType] = None,
  55. percolate: Option[String] = None,
  56. refresh: Option[Boolean] = None,
  57. replicationType: Option[ReplicationType] = None,
  58. routing: Option[String] = None,
  59. timeout: Option[String] = None,
  60. timestamp: Option[String] = None,
  61. ttl: Option[Long] = None,
  62. version: Option[Long] = None,
  63. versionType: Option[VersionType] = None) = index_prepare(index, `type`, id, source, parent, consistencyLevel, contentType, create, listenerThreaded, operationThreaded, opType, percolate, refresh, replicationType, routing, timeout, timestamp, ttl, version, versionType).execute
  64. def index_prepare(
  65. index: String,
  66. `type`: String,
  67. @Nullable id: String,
  68. source: String,
  69. parent: String = null,
  70. consistencyLevel: Option[WriteConsistencyLevel] = None,
  71. contentType: Option[XContentType] = None,
  72. create: Option[Boolean] = None,
  73. listenerThreaded: Option[Boolean] = None,
  74. operationThreaded: Option[Boolean] = None,
  75. opType: Option[IndexRequest.OpType] = None,
  76. percolate: Option[String] = None,
  77. refresh: Option[Boolean] = None,
  78. replicationType: Option[ReplicationType] = None,
  79. routing: Option[String] = None,
  80. timeout: Option[String] = None,
  81. timestamp: Option[String] = None,
  82. ttl: Option[Long] = None,
  83. version: Option[Long] = None,
  84. versionType: Option[VersionType] = None) = {
  85. /* method body */
  86. val request = client.prepareIndex(index, `type`, id)
  87. request.setSource(source)
  88. request.setParent(parent)
  89. consistencyLevel foreach { request.setConsistencyLevel(_) }
  90. contentType foreach { request.setContentType(_) }
  91. create foreach { request.setCreate(_) }
  92. listenerThreaded foreach { request.setListenerThreaded(_) }
  93. operationThreaded foreach { request.setOperationThreaded(_) }
  94. opType foreach { request.setOpType(_) }
  95. percolate foreach { request.setPercolate(_) }
  96. refresh foreach { request.setRefresh(_) }
  97. replicationType foreach { request.setReplicationType(_) }
  98. routing foreach { request.setRouting(_) }
  99. timeout foreach { request.setTimeout(_) }
  100. timestamp foreach { request.setTimestamp(_) }
  101. ttl foreach { request.setTTL(_) }
  102. version foreach { request.setVersion(_) }
  103. versionType foreach { request.setVersionType(_) }
  104. request
  105. }
  106. }
  107. trait Bulk {
  108. self: Indexer =>
  109. def bulk[A <: ActionRequest[A]](
  110. requests: Iterable[A],
  111. consistencyLevel: Option[WriteConsistencyLevel] = None,
  112. refresh: Option[Boolean] = None,
  113. replicationType: Option[ReplicationType] = None) = bulk_send(requests, consistencyLevel, refresh, replicationType).actionGet
  114. def bulk_send[A <: ActionRequest[A]](
  115. requests: Iterable[A],
  116. consistencyLevel: Option[WriteConsistencyLevel] = None,
  117. refresh: Option[Boolean] = None,
  118. replicationType: Option[ReplicationType] = None) = bulk_prepare(requests, consistencyLevel, refresh, replicationType).execute
  119. def bulk_prepare[A <: ActionRequest[A]](
  120. requests: Iterable[A],
  121. consistencyLevel: Option[WriteConsistencyLevel] = None,
  122. refresh: Option[Boolean] = None,
  123. replicationType: Option[ReplicationType] = None) = {
  124. /* method body */
  125. val request = client.prepareBulk
  126. consistencyLevel foreach { request.setConsistencyLevel(_) }
  127. refresh foreach { request.setRefresh(_) }
  128. replicationType foreach { request.setReplicationType(_) }
  129. requests.foldLeft(request) { (result, each) =>
  130. each match {
  131. case indexing: IndexRequest => result.add(indexing)
  132. case deleting: DeleteRequest => result.add(deleting)
  133. case other => throw new IllegalArgumentException("%s type can not be bulk-indexed".format(other.getClass))
  134. }
  135. }
  136. request
  137. }
  138. }
  139. trait Count {
  140. self: Indexer =>
  141. def count(
  142. indices: Iterable[String] = Nil,
  143. types: Iterable[String] = Nil,
  144. query: QueryBuilder = matchAllQuery,
  145. listenerThreaded: Option[Boolean] = None,
  146. minScore: Option[Float] = None,
  147. operationThreading: Option[BroadcastOperationThreading] = None,
  148. routing: Option[String] = None) = count_send(indices, types, query, listenerThreaded, minScore, operationThreading, routing).actionGet
  149. def count_send(
  150. indices: Iterable[String] = Nil,
  151. types: Iterable[String] = Nil,
  152. query: QueryBuilder = matchAllQuery,
  153. listenerThreaded: Option[Boolean] = None,
  154. minScore: Option[Float] = None,
  155. operationThreading: Option[BroadcastOperationThreading] = None,
  156. routing: Option[String] = None) = count_prepare(indices, types, query, listenerThreaded, minScore, operationThreading, routing).execute
  157. def count_prepare(
  158. indices: Iterable[String] = Nil,
  159. types: Iterable[String] = Nil,
  160. query: QueryBuilder = matchAllQuery,
  161. listenerThreaded: Option[Boolean] = None,
  162. minScore: Option[Float] = None,
  163. operationThreading: Option[BroadcastOperationThreading] = None,
  164. routing: Option[String] = None) = {
  165. /* method body */
  166. val request = client.prepareCount(indices.toArray: _*)
  167. .setTypes(types.toArray: _*)
  168. .setQuery(query)
  169. listenerThreaded foreach { request.setListenerThreaded(_) }
  170. minScore foreach { request.setMinScore(_) }
  171. operationThreading foreach { request.setOperationThreading(_) }
  172. routing foreach { request.setRouting(_) }
  173. request
  174. }
  175. }
  176. trait Get {
  177. self: Indexer =>
  178. def get(
  179. index: String,
  180. @Nullable `type`: String,
  181. id: String,
  182. fields: Iterable[String] = Nil,
  183. listenerThreaded: Option[Boolean] = None,
  184. operationThreaded: Option[Boolean] = None,
  185. preference: Option[String] = None,
  186. realtime: Option[Boolean] = None,
  187. refresh: Option[Boolean] = None,
  188. routing: Option[String] = None) = get_send(index, `type`, id, fields, listenerThreaded, operationThreaded, preference, realtime, refresh, routing).actionGet
  189. def get_send(
  190. index: String,
  191. @Nullable `type`: String,
  192. id: String,
  193. fields: Iterable[String] = Nil,
  194. listenerThreaded: Option[Boolean] = None,
  195. operationThreaded: Option[Boolean] = None,
  196. preference: Option[String] = None,
  197. realtime: Option[Boolean] = None,
  198. refresh: Option[Boolean] = None,
  199. routing: Option[String] = None) = get_prepare(index, `type`, id, fields, listenerThreaded, operationThreaded, preference, realtime, refresh, routing).execute
  200. def get_prepare(
  201. index: String,
  202. @Nullable `type`: String,
  203. id: String,
  204. fields: Iterable[String] = Nil,
  205. listenerThreaded: Option[Boolean] = None,
  206. operationThreaded: Option[Boolean] = None,
  207. preference: Option[String] = None,
  208. realtime: Option[Boolean] = None,
  209. refresh: Option[Boolean] = None,
  210. routing: Option[String] = None) = {
  211. /* method body */
  212. val request = client.prepareGet(index, `type`, id)
  213. if (!fields.isEmpty) request.setFields(fields.toArray: _*)
  214. listenerThreaded foreach { request.setListenerThreaded(_) }
  215. operationThreaded foreach { request.setOperationThreaded(_) }
  216. preference foreach { request.setPreference(_) }
  217. realtime foreach { request.setRealtime(_) }
  218. refresh foreach { request.setRefresh(_) }
  219. routing foreach { request.setRouting(_) }
  220. request
  221. }
  222. }
  223. trait Multiget {
  224. self: Indexer =>
  225. def multiget(
  226. index: String,
  227. @Nullable `type`: String,
  228. ids: Iterable[String],
  229. fields: Iterable[String] = Nil,
  230. listenerThreaded: Option[Boolean] = None,
  231. preference: Option[String] = None,
  232. realtime: Option[Boolean] = None,
  233. refresh: Option[Boolean] = None) = multiget_send(index, `type`, ids, fields, listenerThreaded, preference, realtime, refresh).actionGet
  234. def multiget_send(
  235. index: String,
  236. @Nullable `type`: String,
  237. ids: Iterable[String],
  238. fields: Iterable[String] = Nil,
  239. listenerThreaded: Option[Boolean] = None,
  240. preference: Option[String] = None,
  241. realtime: Option[Boolean] = None,
  242. refresh: Option[Boolean] = None) = multiget_prepare(index, `type`, ids, fields, listenerThreaded, preference, realtime, refresh).execute
  243. def multiget_prepare(
  244. index: String,
  245. @Nullable `type`: String,
  246. ids: Iterable[String],
  247. fields: Iterable[String] = Nil,
  248. listenerThreaded: Option[Boolean] = None,
  249. preference: Option[String] = None,
  250. realtime: Option[Boolean] = None,
  251. refresh: Option[Boolean] = None) = {
  252. /* method body */
  253. val request = client.prepareMultiGet
  254. for (each <- ids) {
  255. val item = new MultiGetRequest.Item(index, `type`, each)
  256. if (!fields.isEmpty) item.fields(fields.toArray: _*)
  257. request.add(item)
  258. }
  259. listenerThreaded foreach { request.setListenerThreaded(_) }
  260. preference foreach { request.setPreference(_) }
  261. realtime foreach { request.setRealtime(_) }
  262. refresh foreach { request.setRefresh(_) }
  263. request
  264. }
  265. }
  266. trait Update {
  267. self: Indexer =>
  268. def update(
  269. index: String,
  270. `type`: String,
  271. id: String,
  272. parent: Option[String] = None,
  273. script: Option[String] = None,
  274. scriptLanguage: Option[String] = None,
  275. scriptParams: Map[String, Object] = Map(),
  276. percolate: Option[String] = None,
  277. replicationType: Option[ReplicationType] = None,
  278. consistencyLevel: Option[WriteConsistencyLevel] = None) = update_send(index, `type`, id, parent, script, scriptLanguage, scriptParams, percolate, replicationType, consistencyLevel).actionGet
  279. def update_send(
  280. index: String,
  281. `type`: String,
  282. id: String,
  283. parent: Option[String] = None,
  284. script: Option[String] = None,
  285. scriptLanguage: Option[String] = None,
  286. scriptParams: Map[String, Object] = Map(),
  287. percolate: Option[String] = None,
  288. replicationType: Option[ReplicationType] = None,
  289. consistencyLevel: Option[WriteConsistencyLevel] = None) = update_prepare(index, `type`, id, parent, script, scriptLanguage, scriptParams, percolate, replicationType, consistencyLevel).execute
  290. def update_prepare(
  291. index: String,
  292. `type`: String,
  293. id: String,
  294. parent: Option[String] = None,
  295. script: Option[String] = None,
  296. scriptLanguage: Option[String] = None,
  297. scriptParams: Map[String, Object] = Map(),
  298. percolate: Option[String] = None,
  299. replicationType: Option[ReplicationType] = None,
  300. consistencyLevel: Option[WriteConsistencyLevel] = None) = {
  301. /* method body */
  302. val request = client.prepareUpdate(index, `type`, id)
  303. parent foreach { request.setParent(_) }
  304. script foreach { that =>
  305. request.setScript(that)
  306. request.setScriptParams(scriptParams)
  307. scriptLanguage foreach { request.setScriptLang(_) }
  308. }
  309. percolate foreach { request.setPercolate(_) }
  310. replicationType foreach { request.setReplicationType(_) }
  311. consistencyLevel foreach { request.setConsistencyLevel(_) }
  312. request
  313. }
  314. }
  315. trait Delete {
  316. self: Indexer =>
  317. def delete(
  318. index: String,
  319. `type`: String,
  320. id: String,
  321. parent: String = null,
  322. consistencyLevel: Option[WriteConsistencyLevel] = None,
  323. listenerThreaded: Option[Boolean] = None,
  324. operationThreaded: Option[Boolean] = None,
  325. refresh: Option[Boolean] = None,
  326. replicationType: Option[ReplicationType] = None,
  327. routing: Option[String] = None,
  328. version: Option[Long] = None,
  329. versionType: Option[VersionType] = None) = delete_send(index, `type`, id, parent, consistencyLevel, listenerThreaded, operationThreaded, refresh, replicationType, routing, version, versionType).actionGet
  330. def delete_send(
  331. index: String,
  332. `type`: String,
  333. id: String,
  334. parent: String = null,
  335. consistencyLevel: Option[WriteConsistencyLevel] = None,
  336. listenerThreaded: Option[Boolean] = None,
  337. operationThreaded: Option[Boolean] = None,
  338. refresh: Option[Boolean] = None,
  339. replicationType: Option[ReplicationType] = None,
  340. routing: Option[String] = None,
  341. version: Option[Long] = None,
  342. versionType: Option[VersionType] = None) = delete_prepare(index, `type`, id, parent, consistencyLevel, listenerThreaded, operationThreaded, refresh, replicationType, routing, version, versionType).execute
  343. def delete_prepare(
  344. index: String,
  345. `type`: String,
  346. id: String,
  347. parent: String = null,
  348. consistencyLevel: Option[WriteConsistencyLevel] = None,
  349. listenerThreaded: Option[Boolean] = None,
  350. operationThreaded: Option[Boolean] = None,
  351. refresh: Option[Boolean] = None,
  352. replicationType: Option[ReplicationType] = None,
  353. routing: Option[String] = None,
  354. version: Option[Long] = None,
  355. versionType: Option[VersionType] = None) = {
  356. /* method body */
  357. val request = client.prepareDelete(index, `type`, id)
  358. request.setParent(parent)
  359. consistencyLevel foreach { request.setConsistencyLevel(_) }
  360. listenerThreaded foreach { request.setListenerThreaded(_) }
  361. operationThreaded foreach { request.setOperationThreaded(_) }
  362. refresh foreach { request.setRefresh(_) }
  363. replicationType foreach { request.setReplicationType(_) }
  364. routing foreach { request.setRouting(_) }
  365. version foreach { request.setVersion(_) }
  366. versionType foreach { request.setVersionType(_) }
  367. request
  368. }
  369. }
  370. trait DeleteByQuery {
  371. self: Indexer =>
  372. def deleteByQuery(
  373. indices: Iterable[String] = Nil,
  374. types: Iterable[String] = Nil,
  375. query: QueryBuilder = matchAllQuery,
  376. replicationType: Option[ReplicationType] = None,
  377. consistencyLevel: Option[WriteConsistencyLevel] = None,
  378. routing: Option[String] = None,
  379. timeout: Option[String] = None) = deleteByQuery_send(indices, types, query, replicationType, consistencyLevel, routing, timeout).actionGet
  380. def deleteByQuery_send(
  381. indices: Iterable[String] = Nil,
  382. types: Iterable[String] = Nil,
  383. query: QueryBuilder = matchAllQuery,
  384. replicationType: Option[ReplicationType] = None,
  385. consistencyLevel: Option[WriteConsistencyLevel] = None,
  386. routing: Option[String] = None,
  387. timeout: Option[String] = None) = deleteByQuery_prepare(indices, types, query, replicationType, consistencyLevel, routing, timeout).execute
  388. def deleteByQuery_prepare(
  389. indices: Iterable[String] = Nil,
  390. types: Iterable[String] = Nil,
  391. query: QueryBuilder = matchAllQuery,
  392. replicationType: Option[ReplicationType] = None,
  393. consistencyLevel: Option[WriteConsistencyLevel] = None,
  394. routing: Option[String] = None,
  395. timeout: Option[String] = None) = {
  396. /* method body */
  397. val request = client.prepareDeleteByQuery(indices.toArray: _*)
  398. request.setTypes(types.toArray: _*)
  399. request.setQuery(query)
  400. replicationType foreach { request.setReplicationType(_) }
  401. consistencyLevel foreach { request.setConsistencyLevel(_) }
  402. routing foreach { request.setRouting(_) }
  403. timeout foreach { request.setTimeout(_) }
  404. request
  405. }
  406. }