我目前正在尝试使用Elastic4s创建一个过滤器查询。我已经知道了这一点,但我似乎无法找到任何例子,所以我不确定这是如何工作的。所以我得到了:
val percQuery = percolate in esIndex / esType query myQuery
esClient.execute(percQuery)
每次运行它都不匹配任何东西。我发现我需要能够在Id上进行渗透,但我似乎找不到任何关于如何做到的例子,甚至在文档中都没有。我知道使用Elastic4s创建除了过滤器查询之外的查询,您可以指定一个id字段,如:
val query = index into esIndex / esType source myDoc id 12345
我已尝试过percolate这种方式,但它不喜欢id字段,有人知道如何做到这一点吗?
我之前使用Dispatch Http这样做,但我正试图摆脱它。之前,我这样做是为了提交过滤器查询:
url(s"$esUrl/.percolator/$queryId)
.setContentType("application/json", "utf-8")
.setBody(someJson)
.POST
注意queryId只需要类似于弹性4的东西。
答案 0 :(得分:0)
所以你想要添加一个文档并返回等待添加id
的查询?对于percolate来说,这似乎是一个奇怪的用途,因为它只是一次性使用,因为每个id只能添加一个文档。你不能在elastic4s上做id目前的percolate,我不确定你是否甚至可以在elasticsearch本身做到这一点。
这是我可以提出的最好的尝试,你有自己的“id”字段,可以反映“正确的”_id
字段。
object Test extends App {
import ElasticDsl._
val client = ElasticClient.local
client.execute {
create index "perc" mappings {
"idtest" as(
"id" typed StringType
)
}
}.await
client.execute {
register id "a" into "perc" query {
termQuery("id", "a")
}
}.await
client.execute {
register id "b" into "perc" query {
termQuery("id", "b")
}
}.await
val resp1 = client.execute {
percolate in "perc/idtest" doc("id" -> "a")
}.await
// prints a
println(resp1.getMatches.head.getId)
val resp2 = client.execute {
percolate in "perc/idtest" doc("id" -> "b")
}.await
// prints b
println(resp2.getMatches.head.getId)
}
使用elastic4s 1.7.4编写
答案 1 :(得分:0)
因此,经过更多的研究,我发现了它如何与elastic4s一起使用。要在Elastic4s中执行此操作,您实际上必须使用 register 而不是 percolate ,如下所示:
val percQuery = register id queryId into esIndex query myQuery
这将在id。
处注册一个过滤器查询