弹性搜索多查询与Alpakka-Elasticsearch客户端

3

我是scala的新手,正在使用alpakka-elasticsearch客户端执行与elastic search的查询。

单个搜索查询可以通过以下两种方式正常工作,这两种方式在内部调用elastic search的_search url:

val writeCustomIndex = ElasticsearchSource
 .typed[Book](
  indexName = "source",
  typeName = "_doc",
  query = """{"match_all": {}}"""
 )

或者

val readWithSearchParameters = ElasticsearchSource
.typed[TestDoc](
  indexName,
  Some(typeName),
  searchParams = Map(
  "query" -> """ {"match_all": {}} """,
  "_source" -> """ ["id", "a", "c"] """
  )

我希望你能为我进行以下多重查询(_msearch),并使用此客户端执行。
url - http://localhost:9200/index1/_msearch?
request :
[
 {"query" : {"match_all" : {}}, "from" : 0, "size" : 1},
 {"index" : "index2"},
 {"query" : {"match_all" : {}}, "from" : 0, "size" : 2}
]

弹性客户端源代码:https://doc.akka.io/docs/alpakka/current/elasticsearch.html

1
我认为你应该使用类似于https://doc.akka.io/docs/akka/current/stream/operators/Source-or-Flow/merge.html的方式合并单独的源(每个搜索请求一个)。 - Aleksey Isachenkov
1个回答

1

根据建议,我尝试了一种方法,将两个来源合并了。

希望能对某些人有所帮助!

 var elasticRecord: Future[Seq[ElasticRecord]] = ElasticsearchSource
  .typed[ElasticRecord](
  indexName1,
  Some(typeName1),
  query1,
  settings = ElasticsearchSourceSettings()).map { message =>
  message.source
}.merge(ElasticsearchSource
  .typed[ElasticRecord](
  indexName2,
  Some(typeName2),
  query1,
  settings = ElasticsearchSourceSettings()).map { message =>
  message.source
}).runWith(Sink.seq)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接