1 /*
2  *  Make.org Core API
3  *  Copyright (C) 2018 Make.org
4  *
5  * This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU Affero General Public License as
7  *  published by the Free Software Foundation, either version 3 of the
8  *  License, or (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU Affero General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Affero General Public License
16  *  along with this program.  If not, see <https://www.gnu.org/licenses/>.
17  *
18  */
19 
20 package org.make.api.idea
21 
22 import akka.Done
23 import cats.implicits._
24 import com.sksamuel.elastic4s.Index
25 import com.sksamuel.elastic4s.circe._
26 import com.sksamuel.elastic4s.ElasticDsl._
27 import com.sksamuel.elastic4s.requests.common.RefreshPolicy
28 import com.sksamuel.elastic4s.requests.searches.SearchRequest
29 import com.sksamuel.elastic4s.requests.searches.queries.compound.BoolQuery
30 import grizzled.slf4j.Logging
31 import io.circe.{Json, Printer}
32 import org.make.api.technical.elasticsearch._
33 import org.make.core.CirceFormatters
34 import org.make.core.idea.indexed.{IdeaSearchResult, IndexedIdea}
35 import org.make.core.idea._
36 
37 import scala.concurrent.ExecutionContext.Implicits.global
38 import scala.concurrent.Future
39 
40 trait IdeaSearchEngineComponent {
41   def elasticsearchIdeaAPI: IdeaSearchEngine
42 }
43 
44 trait IdeaSearchEngine {
45   def findIdeaById(ideaId: IdeaId): Future[Option[IndexedIdea]]
46   def searchIdeas(query: IdeaSearchQuery): Future[IdeaSearchResult]
47   def indexIdea(record: IndexedIdea, mayBeIndex: Option[Index] = None): Future[Done]
48   def indexIdeas(records: Seq[IndexedIdea], mayBeIndex: Option[Index] = None): Future[Done]
49   def updateIdea(record: IndexedIdea, mayBeIndex: Option[Index] = None): Future[Done]
50 }
51 
52 object IdeaSearchEngine {
53   val ideaIndexName: String = "idea"
54 }
55 
56 trait DefaultIdeaSearchEngineComponent extends IdeaSearchEngineComponent with CirceFormatters {
57   self: ElasticsearchConfigurationComponent with ElasticsearchClientComponent =>
58 
59   override lazy val elasticsearchIdeaAPI: IdeaSearchEngine = new DefaultIdeaSearchEngine
60 
61   class DefaultIdeaSearchEngine extends IdeaSearchEngine with Logging {
62 
63     private lazy val client = elasticsearchClient.client
64 
65     private val ideaAlias: Index = elasticsearchConfiguration.ideaAliasName
66 
67     // TODO remove once elastic4s-circe upgrades to circe 0.14
68     private implicit val printer: Json => String = Printer.noSpaces.print
69 
70     override def findIdeaById(ideaId: IdeaId): Future[Option[IndexedIdea]] = {
71       client
72         .executeAsFuture(get(ideaAlias, ideaId.value))
73         .map(_.toOpt[IndexedIdea])
74     }
75 
76     override def searchIdeas(ideaSearchQuery: IdeaSearchQuery): Future[IdeaSearchResult] = {
77       // parse json string to build search query
78       val searchFilters = IdeaSearchFilters.getIdeaSearchFilters(ideaSearchQuery)
79       val request: SearchRequest = search(ideaAlias)
80         .bool(BoolQuery(must = searchFilters))
81         .sortBy(IdeaSearchFilters.getSort(ideaSearchQuery).toList)
82         .size(IdeaSearchFilters.getLimitSearch(ideaSearchQuery))
83         .from(IdeaSearchFilters.getSkipSearch(ideaSearchQuery))
84         .trackTotalHits(true)
85 
86       client
87         .executeAsFuture(request)
88         .map(response => IdeaSearchResult(total = response.totalHits, results = response.to[IndexedIdea]))
89     }
90 
91     override def indexIdea(record: IndexedIdea, maybeIndex: Option[Index] = None): Future[Done] = {
92       val index = maybeIndex.getOrElse(ideaAlias)
93       client
94         .executeAsFuture(indexInto(index).doc(record).refresh(RefreshPolicy.IMMEDIATE).id(record.ideaId.value))
95         .as(Done)
96     }
97 
98     override def indexIdeas(records: Seq[IndexedIdea], maybeIndex: Option[Index] = None): Future[Done] = {
99       val index = maybeIndex.getOrElse(ideaAlias)
100       client
101         .executeAsFuture(bulk(records.map { record =>
102           indexInto(index).doc(record).refresh(RefreshPolicy.IMMEDIATE).id(record.ideaId.value)
103         }))
104         .as(Done)
105     }
106 
107     override def updateIdea(record: IndexedIdea, maybeIndex: Option[Index] = None): Future[Done] = {
108       val index = maybeIndex.getOrElse(ideaAlias)
109       client
110         .executeAsFuture(
111           updateById(index, record.ideaId.value)
112             .doc(record)
113             .refresh(RefreshPolicy.IMMEDIATE)
114         )
115         .as(Done)
116     }
117   }
118 }
Line Stmt Id Pos Tree Symbol Tests Code
53 8450 2018 - 2024 Literal <nosymbol> "idea"
65 8098 2462 - 2502 ApplyImplicitView com.sksamuel.elastic4s.Index.toIndex org.scalatest.testsuite elastic4s.this.Index.toIndex(DefaultIdeaSearchEngineComponent.this.elasticsearchConfiguration.ideaAliasName)
68 8692 2618 - 2640 Apply io.circe.Printer.print io.circe.Printer.noSpaces.print(json)
72 8376 2758 - 2758 Select com.sksamuel.elastic4s.handlers.get.GetHandlers.GetHandler com.sksamuel.elastic4s.ElasticDsl.GetHandler
72 8330 2763 - 2772 Select org.make.api.idea.DefaultIdeaSearchEngineComponent.DefaultIdeaSearchEngine.ideaAlias DefaultIdeaSearchEngine.this.ideaAlias
72 8674 2758 - 2758 Apply scala.reflect.ManifestFactory.classType scala.reflect.ManifestFactory.classType[com.sksamuel.elastic4s.requests.get.GetResponse](classOf[com.sksamuel.elastic4s.requests.get.GetResponse])
72 8760 2759 - 2787 Apply com.sksamuel.elastic4s.api.GetApi.get com.sksamuel.elastic4s.ElasticDsl.get(DefaultIdeaSearchEngine.this.ideaAlias, ideaId.value)
72 8120 2774 - 2786 Select org.make.core.idea.IdeaId.value ideaId.value
72 8009 2758 - 2758 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
73 8331 2801 - 2801 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
73 8695 2802 - 2822 ApplyToImplicitArgs com.sksamuel.elastic4s.Hit.toOpt x$1.toOpt[org.make.core.idea.indexed.IndexedIdea](com.sksamuel.elastic4s.circe.`package`.hitReaderWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec))
73 8055 2809 - 2809 ApplyToImplicitArgs com.sksamuel.elastic4s.circe.hitReaderWithCirce com.sksamuel.elastic4s.circe.`package`.hitReaderWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec)
73 8431 2809 - 2809 Select org.make.core.idea.indexed.IndexedIdea.codec indexed.this.IndexedIdea.codec
73 8164 2727 - 2823 ApplyToImplicitArgs scala.concurrent.Future.map org.make.api.technical.elasticsearch.`package`.RichHttpClient(DefaultIdeaSearchEngine.this.client).executeAsFuture[com.sksamuel.elastic4s.requests.get.GetRequest, com.sksamuel.elastic4s.requests.get.GetResponse](com.sksamuel.elastic4s.ElasticDsl.get(DefaultIdeaSearchEngine.this.ideaAlias, ideaId.value))(com.sksamuel.elastic4s.ElasticDsl.GetHandler, scala.concurrent.ExecutionContext.Implicits.global, scala.reflect.ManifestFactory.classType[com.sksamuel.elastic4s.requests.get.GetResponse](classOf[com.sksamuel.elastic4s.requests.get.GetResponse])).map[Option[org.make.core.idea.indexed.IndexedIdea]](((x$1: com.sksamuel.elastic4s.requests.get.GetResponse) => x$1.toOpt[org.make.core.idea.indexed.IndexedIdea](com.sksamuel.elastic4s.circe.`package`.hitReaderWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec))))(scala.concurrent.ExecutionContext.Implicits.global)
78 8742 2999 - 3054 Apply org.make.core.idea.IdeaSearchFilters.getIdeaSearchFilters org.scalatest.testsuite org.make.core.idea.IdeaSearchFilters.getIdeaSearchFilters(ideaSearchQuery)
84 8368 3090 - 3380 Apply com.sksamuel.elastic4s.requests.searches.SearchRequest.trackTotalHits org.scalatest.testsuite com.sksamuel.elastic4s.ElasticDsl.search(DefaultIdeaSearchEngine.this.ideaAlias).bool({ <artifact> val x$1: Seq[com.sksamuel.elastic4s.requests.searches.queries.Query] @scala.reflect.internal.annotations.uncheckedBounds = searchFilters; <artifact> val x$2: Option[Boolean] @scala.reflect.internal.annotations.uncheckedBounds = com.sksamuel.elastic4s.requests.searches.queries.compound.BoolQuery.apply$default$1; <artifact> val x$3: Option[Double] @scala.reflect.internal.annotations.uncheckedBounds = com.sksamuel.elastic4s.requests.searches.queries.compound.BoolQuery.apply$default$2; <artifact> val x$4: Option[String] @scala.reflect.internal.annotations.uncheckedBounds = com.sksamuel.elastic4s.requests.searches.queries.compound.BoolQuery.apply$default$3; <artifact> val x$5: Option[String] @scala.reflect.internal.annotations.uncheckedBounds = com.sksamuel.elastic4s.requests.searches.queries.compound.BoolQuery.apply$default$4; <artifact> val x$6: Seq[com.sksamuel.elastic4s.requests.searches.queries.Query] @scala.reflect.internal.annotations.uncheckedBounds = com.sksamuel.elastic4s.requests.searches.queries.compound.BoolQuery.apply$default$5; <artifact> val x$7: Seq[com.sksamuel.elastic4s.requests.searches.queries.Query] @scala.reflect.internal.annotations.uncheckedBounds = com.sksamuel.elastic4s.requests.searches.queries.compound.BoolQuery.apply$default$7; <artifact> val x$8: Seq[com.sksamuel.elastic4s.requests.searches.queries.Query] @scala.reflect.internal.annotations.uncheckedBounds = com.sksamuel.elastic4s.requests.searches.queries.compound.BoolQuery.apply$default$8; com.sksamuel.elastic4s.requests.searches.queries.compound.BoolQuery.apply(x$2, x$3, x$4, x$5, x$6, x$1, x$7, x$8) }).sortBy(org.make.core.idea.IdeaSearchFilters.getSort(ideaSearchQuery).toList).size(org.make.core.idea.IdeaSearchFilters.getLimitSearch(ideaSearchQuery)).from(org.make.core.idea.IdeaSearchFilters.getSkipSearch(ideaSearchQuery)).trackTotalHits(true)
87 8014 3419 - 3419 Select com.sksamuel.elastic4s.requests.searches.SearchHandlers.SearchHandler org.scalatest.testsuite com.sksamuel.elastic4s.ElasticDsl.SearchHandler
87 8676 3419 - 3419 Select scala.concurrent.ExecutionContext.Implicits.global org.scalatest.testsuite scala.concurrent.ExecutionContext.Implicits.global
87 8478 3419 - 3419 Apply scala.reflect.ManifestFactory.classType org.scalatest.testsuite scala.reflect.ManifestFactory.classType[com.sksamuel.elastic4s.requests.searches.SearchResponse](classOf[com.sksamuel.elastic4s.requests.searches.SearchResponse])
88 8753 3454 - 3534 Apply org.make.core.idea.indexed.IdeaSearchResult.apply org.make.core.idea.indexed.IdeaSearchResult.apply(response.totalHits, response.to[org.make.core.idea.indexed.IndexedIdea](com.sksamuel.elastic4s.circe.`package`.hitReaderWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec), (ClassTag.apply[org.make.core.idea.indexed.IndexedIdea](classOf[org.make.core.idea.indexed.IndexedIdea]): scala.reflect.ClassTag[org.make.core.idea.indexed.IndexedIdea])))
88 8017 3388 - 3535 ApplyToImplicitArgs scala.concurrent.Future.map org.scalatest.testsuite org.make.api.technical.elasticsearch.`package`.RichHttpClient(DefaultIdeaSearchEngine.this.client).executeAsFuture[com.sksamuel.elastic4s.requests.searches.SearchRequest, com.sksamuel.elastic4s.requests.searches.SearchResponse](request)(com.sksamuel.elastic4s.ElasticDsl.SearchHandler, scala.concurrent.ExecutionContext.Implicits.global, scala.reflect.ManifestFactory.classType[com.sksamuel.elastic4s.requests.searches.SearchResponse](classOf[com.sksamuel.elastic4s.requests.searches.SearchResponse])).map[org.make.core.idea.indexed.IdeaSearchResult](((response: com.sksamuel.elastic4s.requests.searches.SearchResponse) => org.make.core.idea.indexed.IdeaSearchResult.apply(response.totalHits, response.to[org.make.core.idea.indexed.IndexedIdea](com.sksamuel.elastic4s.circe.`package`.hitReaderWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec), (ClassTag.apply[org.make.core.idea.indexed.IndexedIdea](classOf[org.make.core.idea.indexed.IndexedIdea]): scala.reflect.ClassTag[org.make.core.idea.indexed.IndexedIdea])))))(scala.concurrent.ExecutionContext.Implicits.global)
88 7930 3509 - 3533 ApplyToImplicitArgs com.sksamuel.elastic4s.requests.searches.SearchResponse.to response.to[org.make.core.idea.indexed.IndexedIdea](com.sksamuel.elastic4s.circe.`package`.hitReaderWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec), (ClassTag.apply[org.make.core.idea.indexed.IndexedIdea](classOf[org.make.core.idea.indexed.IndexedIdea]): scala.reflect.ClassTag[org.make.core.idea.indexed.IndexedIdea]))
88 8346 3520 - 3520 ApplyToImplicitArgs com.sksamuel.elastic4s.circe.hitReaderWithCirce com.sksamuel.elastic4s.circe.`package`.hitReaderWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec)
88 8414 3441 - 3441 Select scala.concurrent.ExecutionContext.Implicits.global org.scalatest.testsuite scala.concurrent.ExecutionContext.Implicits.global
88 8096 3479 - 3497 Select com.sksamuel.elastic4s.requests.searches.SearchResponse.totalHits response.totalHits
88 8682 3520 - 3520 Select org.make.core.idea.indexed.IndexedIdea.codec indexed.this.IndexedIdea.codec
92 8480 3661 - 3692 Apply scala.Option.getOrElse maybeIndex.getOrElse[com.sksamuel.elastic4s.Index](DefaultIdeaSearchEngine.this.ideaAlias)
92 8656 3682 - 3691 Select org.make.api.idea.DefaultIdeaSearchEngineComponent.DefaultIdeaSearchEngine.ideaAlias DefaultIdeaSearchEngine.this.ideaAlias
94 8349 3751 - 3751 ApplyToImplicitArgs com.sksamuel.elastic4s.circe.indexableWithCirce com.sksamuel.elastic4s.circe.`package`.indexableWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec, DefaultIdeaSearchEngine.this.printer)
94 8729 3730 - 3730 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
94 7972 3768 - 3791 Select com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE
94 8444 3730 - 3730 Apply scala.reflect.ManifestFactory.classType scala.reflect.ManifestFactory.classType[com.sksamuel.elastic4s.requests.indexes.IndexResponse](classOf[com.sksamuel.elastic4s.requests.indexes.IndexResponse])
94 8659 3730 - 3730 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
94 8758 3796 - 3815 Select org.make.core.idea.IdeaId.value record.ideaId.value
94 8318 3730 - 3730 ApplyToImplicitArgs cats.instances.FutureInstances.catsStdInstancesForFuture cats.implicits.catsStdInstancesForFuture(scala.concurrent.ExecutionContext.Implicits.global)
94 8727 3751 - 3751 Select org.make.api.idea.DefaultIdeaSearchEngineComponent.DefaultIdeaSearchEngine.printer DefaultIdeaSearchEngine.this.printer
94 8416 3731 - 3816 Apply com.sksamuel.elastic4s.requests.indexes.IndexRequest.id com.sksamuel.elastic4s.ElasticDsl.indexInto(index).doc[org.make.core.idea.indexed.IndexedIdea](record)(com.sksamuel.elastic4s.circe.`package`.indexableWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec, DefaultIdeaSearchEngine.this.printer)).refresh(com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE).id(record.ideaId.value)
94 8075 3751 - 3751 Select org.make.core.idea.indexed.IndexedIdea.codec indexed.this.IndexedIdea.codec
94 8078 3699 - 3817 ApplyToImplicitArgs org.make.api.technical.elasticsearch.RichHttpClient.executeAsFuture org.make.api.technical.elasticsearch.`package`.RichHttpClient(DefaultIdeaSearchEngine.this.client).executeAsFuture[com.sksamuel.elastic4s.requests.indexes.IndexRequest, com.sksamuel.elastic4s.requests.indexes.IndexResponse](com.sksamuel.elastic4s.ElasticDsl.indexInto(index).doc[org.make.core.idea.indexed.IndexedIdea](record)(com.sksamuel.elastic4s.circe.`package`.indexableWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec, DefaultIdeaSearchEngine.this.printer)).refresh(com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE).id(record.ideaId.value))(com.sksamuel.elastic4s.ElasticDsl.IndexHandler, scala.concurrent.ExecutionContext.Implicits.global, scala.reflect.ManifestFactory.classType[com.sksamuel.elastic4s.requests.indexes.IndexResponse](classOf[com.sksamuel.elastic4s.requests.indexes.IndexResponse]))
94 8006 3730 - 3730 Select com.sksamuel.elastic4s.handlers.index.IndexHandlers.IndexHandler com.sksamuel.elastic4s.ElasticDsl.IndexHandler
95 7977 3830 - 3834 Select akka.Done akka.Done
95 8748 3699 - 3835 Apply cats.Functor.Ops.as cats.implicits.toFunctorOps[scala.concurrent.Future, com.sksamuel.elastic4s.requests.indexes.IndexResponse](org.make.api.technical.elasticsearch.`package`.RichHttpClient(DefaultIdeaSearchEngine.this.client).executeAsFuture[com.sksamuel.elastic4s.requests.indexes.IndexRequest, com.sksamuel.elastic4s.requests.indexes.IndexResponse](com.sksamuel.elastic4s.ElasticDsl.indexInto(index).doc[org.make.core.idea.indexed.IndexedIdea](record)(com.sksamuel.elastic4s.circe.`package`.indexableWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec, DefaultIdeaSearchEngine.this.printer)).refresh(com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE).id(record.ideaId.value))(com.sksamuel.elastic4s.ElasticDsl.IndexHandler, scala.concurrent.ExecutionContext.Implicits.global, scala.reflect.ManifestFactory.classType[com.sksamuel.elastic4s.requests.indexes.IndexResponse](classOf[com.sksamuel.elastic4s.requests.indexes.IndexResponse])))(cats.implicits.catsStdInstancesForFuture(scala.concurrent.ExecutionContext.Implicits.global)).as[akka.Done.type](akka.Done)
99 8010 3968 - 3999 Apply scala.Option.getOrElse maybeIndex.getOrElse[com.sksamuel.elastic4s.Index](DefaultIdeaSearchEngine.this.ideaAlias)
99 8398 3989 - 3998 Select org.make.api.idea.DefaultIdeaSearchEngineComponent.DefaultIdeaSearchEngine.ideaAlias DefaultIdeaSearchEngine.this.ideaAlias
101 8283 4037 - 4037 Apply scala.reflect.ManifestFactory.classType scala.reflect.ManifestFactory.classType[com.sksamuel.elastic4s.requests.bulk.BulkResponse](classOf[com.sksamuel.elastic4s.requests.bulk.BulkResponse])
101 8064 4006 - 4174 ApplyToImplicitArgs org.make.api.technical.elasticsearch.RichHttpClient.executeAsFuture org.make.api.technical.elasticsearch.`package`.RichHttpClient(DefaultIdeaSearchEngine.this.client).executeAsFuture[com.sksamuel.elastic4s.requests.bulk.BulkRequest, com.sksamuel.elastic4s.requests.bulk.BulkResponse](com.sksamuel.elastic4s.ElasticDsl.bulk(records.map[com.sksamuel.elastic4s.requests.indexes.IndexRequest](((record: org.make.core.idea.indexed.IndexedIdea) => com.sksamuel.elastic4s.ElasticDsl.indexInto(index).doc[org.make.core.idea.indexed.IndexedIdea](record)(com.sksamuel.elastic4s.circe.`package`.indexableWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec, DefaultIdeaSearchEngine.this.printer)).refresh(com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE).id(record.ideaId.value)))))(com.sksamuel.elastic4s.ElasticDsl.BulkHandler, scala.concurrent.ExecutionContext.Implicits.global, scala.reflect.ManifestFactory.classType[com.sksamuel.elastic4s.requests.bulk.BulkResponse](classOf[com.sksamuel.elastic4s.requests.bulk.BulkResponse]))
101 8749 4043 - 4172 Apply scala.collection.IterableOps.map records.map[com.sksamuel.elastic4s.requests.indexes.IndexRequest](((record: org.make.core.idea.indexed.IndexedIdea) => com.sksamuel.elastic4s.ElasticDsl.indexInto(index).doc[org.make.core.idea.indexed.IndexedIdea](record)(com.sksamuel.elastic4s.circe.`package`.indexableWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec, DefaultIdeaSearchEngine.this.printer)).refresh(com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE).id(record.ideaId.value)))
101 8399 4038 - 4173 Apply com.sksamuel.elastic4s.api.BulkApi.bulk com.sksamuel.elastic4s.ElasticDsl.bulk(records.map[com.sksamuel.elastic4s.requests.indexes.IndexRequest](((record: org.make.core.idea.indexed.IndexedIdea) => com.sksamuel.elastic4s.ElasticDsl.indexInto(index).doc[org.make.core.idea.indexed.IndexedIdea](record)(com.sksamuel.elastic4s.circe.`package`.indexableWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec, DefaultIdeaSearchEngine.this.printer)).refresh(com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE).id(record.ideaId.value))))
101 8683 4037 - 4037 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
101 7994 4037 - 4037 Select com.sksamuel.elastic4s.handlers.bulk.BulkHandlers.BulkHandler com.sksamuel.elastic4s.ElasticDsl.BulkHandler
101 8631 4037 - 4037 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
101 8305 4037 - 4037 ApplyToImplicitArgs cats.instances.FutureInstances.catsStdInstancesForFuture cats.implicits.catsStdInstancesForFuture(scala.concurrent.ExecutionContext.Implicits.global)
102 8322 4142 - 4161 Select org.make.core.idea.IdeaId.value record.ideaId.value
102 8680 4114 - 4137 Select com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE
102 7965 4077 - 4162 Apply com.sksamuel.elastic4s.requests.indexes.IndexRequest.id com.sksamuel.elastic4s.ElasticDsl.indexInto(index).doc[org.make.core.idea.indexed.IndexedIdea](record)(com.sksamuel.elastic4s.circe.`package`.indexableWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec, DefaultIdeaSearchEngine.this.printer)).refresh(com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE).id(record.ideaId.value)
102 8081 4097 - 4097 ApplyToImplicitArgs com.sksamuel.elastic4s.circe.indexableWithCirce com.sksamuel.elastic4s.circe.`package`.indexableWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec, DefaultIdeaSearchEngine.this.printer)
102 8251 4097 - 4097 Select org.make.api.idea.DefaultIdeaSearchEngineComponent.DefaultIdeaSearchEngine.printer DefaultIdeaSearchEngine.this.printer
102 8628 4097 - 4097 Select org.make.core.idea.indexed.IndexedIdea.codec indexed.this.IndexedIdea.codec
104 7969 4187 - 4191 Select akka.Done akka.Done
104 8556 4006 - 4192 Apply cats.Functor.Ops.as cats.implicits.toFunctorOps[scala.concurrent.Future, com.sksamuel.elastic4s.requests.bulk.BulkResponse](org.make.api.technical.elasticsearch.`package`.RichHttpClient(DefaultIdeaSearchEngine.this.client).executeAsFuture[com.sksamuel.elastic4s.requests.bulk.BulkRequest, com.sksamuel.elastic4s.requests.bulk.BulkResponse](com.sksamuel.elastic4s.ElasticDsl.bulk(records.map[com.sksamuel.elastic4s.requests.indexes.IndexRequest](((record: org.make.core.idea.indexed.IndexedIdea) => com.sksamuel.elastic4s.ElasticDsl.indexInto(index).doc[org.make.core.idea.indexed.IndexedIdea](record)(com.sksamuel.elastic4s.circe.`package`.indexableWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec, DefaultIdeaSearchEngine.this.printer)).refresh(com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE).id(record.ideaId.value)))))(com.sksamuel.elastic4s.ElasticDsl.BulkHandler, scala.concurrent.ExecutionContext.Implicits.global, scala.reflect.ManifestFactory.classType[com.sksamuel.elastic4s.requests.bulk.BulkResponse](classOf[com.sksamuel.elastic4s.requests.bulk.BulkResponse])))(cats.implicits.catsStdInstancesForFuture(scala.concurrent.ExecutionContext.Implicits.global)).as[akka.Done.type](akka.Done)
108 8427 4340 - 4349 Select org.make.api.idea.DefaultIdeaSearchEngineComponent.DefaultIdeaSearchEngine.ideaAlias DefaultIdeaSearchEngine.this.ideaAlias
108 7998 4319 - 4350 Apply scala.Option.getOrElse maybeIndex.getOrElse[com.sksamuel.elastic4s.Index](DefaultIdeaSearchEngine.this.ideaAlias)
110 8062 4388 - 4388 ApplyToImplicitArgs cats.instances.FutureInstances.catsStdInstancesForFuture cats.implicits.catsStdInstancesForFuture(scala.concurrent.ExecutionContext.Implicits.global)
110 8047 4388 - 4388 Apply scala.reflect.ManifestFactory.classType scala.reflect.ManifestFactory.classType[com.sksamuel.elastic4s.requests.update.UpdateResponse](classOf[com.sksamuel.elastic4s.requests.update.UpdateResponse])
110 8292 4388 - 4388 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
110 8641 4357 - 4519 ApplyToImplicitArgs org.make.api.technical.elasticsearch.RichHttpClient.executeAsFuture org.make.api.technical.elasticsearch.`package`.RichHttpClient(DefaultIdeaSearchEngine.this.client).executeAsFuture[com.sksamuel.elastic4s.requests.update.UpdateRequest, com.sksamuel.elastic4s.requests.update.UpdateResponse](com.sksamuel.elastic4s.ElasticDsl.updateById(index, record.ideaId.value).doc[org.make.core.idea.indexed.IndexedIdea](record)(com.sksamuel.elastic4s.circe.`package`.indexableWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec, DefaultIdeaSearchEngine.this.printer)).refresh(com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE))(com.sksamuel.elastic4s.ElasticDsl.UpdateHandler, scala.concurrent.ExecutionContext.Implicits.global, scala.reflect.ManifestFactory.classType[com.sksamuel.elastic4s.requests.update.UpdateResponse](classOf[com.sksamuel.elastic4s.requests.update.UpdateResponse]))
110 8608 4388 - 4388 Select com.sksamuel.elastic4s.handlers.update.UpdateHandlers.UpdateHandler com.sksamuel.elastic4s.ElasticDsl.UpdateHandler
110 8395 4388 - 4388 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
111 8622 4418 - 4437 Select org.make.core.idea.IdeaId.value record.ideaId.value
112 8285 4455 - 4455 Select org.make.core.idea.indexed.IndexedIdea.codec indexed.this.IndexedIdea.codec
112 8114 4455 - 4455 Select org.make.api.idea.DefaultIdeaSearchEngineComponent.DefaultIdeaSearchEngine.printer DefaultIdeaSearchEngine.this.printer
112 8736 4455 - 4455 ApplyToImplicitArgs com.sksamuel.elastic4s.circe.indexableWithCirce com.sksamuel.elastic4s.circe.`package`.indexableWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec, DefaultIdeaSearchEngine.this.printer)
113 8307 4485 - 4508 Select com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE
113 7976 4400 - 4509 Apply com.sksamuel.elastic4s.requests.update.UpdateRequest.refresh com.sksamuel.elastic4s.ElasticDsl.updateById(index, record.ideaId.value).doc[org.make.core.idea.indexed.IndexedIdea](record)(com.sksamuel.elastic4s.circe.`package`.indexableWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec, DefaultIdeaSearchEngine.this.printer)).refresh(com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE)
115 8714 4532 - 4536 Select akka.Done akka.Done
115 8355 4357 - 4537 Apply cats.Functor.Ops.as cats.implicits.toFunctorOps[scala.concurrent.Future, com.sksamuel.elastic4s.requests.update.UpdateResponse](org.make.api.technical.elasticsearch.`package`.RichHttpClient(DefaultIdeaSearchEngine.this.client).executeAsFuture[com.sksamuel.elastic4s.requests.update.UpdateRequest, com.sksamuel.elastic4s.requests.update.UpdateResponse](com.sksamuel.elastic4s.ElasticDsl.updateById(index, record.ideaId.value).doc[org.make.core.idea.indexed.IndexedIdea](record)(com.sksamuel.elastic4s.circe.`package`.indexableWithCirce[org.make.core.idea.indexed.IndexedIdea](indexed.this.IndexedIdea.codec, DefaultIdeaSearchEngine.this.printer)).refresh(com.sksamuel.elastic4s.requests.common.RefreshPolicy.IMMEDIATE))(com.sksamuel.elastic4s.ElasticDsl.UpdateHandler, scala.concurrent.ExecutionContext.Implicits.global, scala.reflect.ManifestFactory.classType[com.sksamuel.elastic4s.requests.update.UpdateResponse](classOf[com.sksamuel.elastic4s.requests.update.UpdateResponse])))(cats.implicits.catsStdInstancesForFuture(scala.concurrent.ExecutionContext.Implicits.global)).as[akka.Done.type](akka.Done)