ESMap.groovy 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import com.dySweetFishPlugin.elasticsearch.ESClient
  2. import com.sweetfish.convert.json.JsonConvert
  3. import com.yinjie.heating.common.api.QueryBuilderExecutor
  4. import com.yinjie.heating.common.api.SortBuilderExecutor
  5. import org.elasticsearch.action.search.SearchRequestBuilder
  6. import org.elasticsearch.action.search.SearchResponse
  7. import org.elasticsearch.common.unit.TimeValue
  8. import org.elasticsearch.index.query.QueryBuilder
  9. import java.util.function.ToLongFunction
  10. /**
  11. * Created by jlutt on 2022-04-20
  12. *
  13. * @author jlutt
  14. */
  15. class ESMap<T> {
  16. private long[] src
  17. private ESClient esClient
  18. private JsonConvert jsonConvert
  19. private Class<T> clazz
  20. private QueryBuilderExecutor qbe
  21. private String index
  22. private ToLongFunction<T> tl
  23. private List<SortBuilderExecutor> sbeList = new ArrayList<>()
  24. static <T> ESMap<T> getESMap() {
  25. return new ESMap<>()
  26. }
  27. ESMap<T> srcIds(long[] value) {
  28. this.src = value
  29. return this
  30. }
  31. ESMap<T> esClient(ESClient value) {
  32. this.esClient = value
  33. return this
  34. }
  35. ESMap<T> jsonConvert(JsonConvert value) {
  36. this.jsonConvert = value
  37. return this
  38. }
  39. ESMap<T> clazz(Class<T> value) {
  40. this.clazz = value
  41. return this
  42. }
  43. ESMap<T> queryBuilder(QueryBuilderExecutor value) {
  44. this.qbe = value
  45. return this
  46. }
  47. ESMap<T> sortBuilder(SortBuilderExecutor value) {
  48. this.sbeList.add(value)
  49. return this
  50. }
  51. ESMap<T> index(String value) {
  52. this.index = value
  53. return this
  54. }
  55. ESMap<T> convertLongExecutor(ToLongFunction<T> value) {
  56. this.tl = value
  57. return this
  58. }
  59. Map<Long, List<T>> execute() {
  60. QueryBuilder qb = qbe.execute(null)
  61. SearchRequestBuilder requestBuilder = esClient.getClient().prepareSearch(index).setQuery(qb)
  62. if ((sbeList != null) && (!sbeList.isEmpty())) {
  63. for (SortBuilderExecutor sortBuilderExecutor : sbeList) {
  64. if (sortBuilderExecutor != null) {
  65. requestBuilder = requestBuilder.addSort(sortBuilderExecutor.execute())
  66. }
  67. }
  68. }
  69. SearchResponse scrollResp = requestBuilder.setSize(100)
  70. .setScroll(new TimeValue(60000))
  71. .execute()
  72. .actionGet()
  73. HashMap<Long, List<T>> dataMap = new HashMap<>()
  74. while (scrollResp.getHits().getHits().length != 0) {
  75. scrollResp.getHits().getHits().each { x ->
  76. String json = x.getSourceAsString()
  77. T result = jsonConvert.convertFrom(clazz, json)
  78. long iValue = tl.applyAsLong(result)
  79. if (!dataMap.containsKey(iValue)) {
  80. dataMap.put(iValue, new ArrayList<>())
  81. }
  82. dataMap.get(iValue).add(result)
  83. }
  84. scrollResp = esClient.getClient().prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet()
  85. }
  86. src.each { l ->
  87. if (!dataMap.containsKey(l)) {
  88. dataMap.put(l, new ArrayList<>())
  89. }
  90. }
  91. return dataMap
  92. }
  93. }