我一直在使用elastic4s进行数据检索,并开始研究我当前代码的测试。我正在尝试创建一个本地客户端,然后我可以使用它(并传递给我的actor),这些客户端将比在构建服务器上部署弹性集群并保持其维护更易于管理。
以下是我迄今为止尝试过的代码。这应该启动一个简单的实例,创建一个索引,将视频添加到"视频"索引,然后检索它。
val essettings = ImmutableSettings
.settingsBuilder().put("cluster.name", conf.getString("elasticsearch.cluster-name")).build()
ElasticsearchConnection.setInstance(ElasticClient.local(essettings))
val client = ElasticsearchConnection.getInstance()
client.execute( create index "videos" mappings(
"video" as (
"artist" typed StringType,
"title" typed StringType
)
)
)
client.execute(
bulk(
index into "videos" id 1 fields ("title" -> "Worth It", "artist" -> "Fifth Harmony")
)
).await
val resp = client.execute(
search in "videos" types "video" limit 1 query bool {
must (
matchQuery("artist", "Fifth Harmony")
)
}
).await
然而,它并没有像我期望的那样发挥作用。它在没有中断任何行的情况下运行,但在resp
中找不到任何数据。我对外部ES集群使用相同类型的查询,所以我认为我的设置方式有问题。
答案 0 :(得分:1)
您可以在elastic4s中使用许多帮助程序来创建嵌入式实例 - 查看任何单元测试。但我们假设您想手动完成所有操作。
你不会说出什么版本的弹性搜索,但我会假设1.7。
简单的答案是您在索引时没有设置类型。您必须指定一个,即使它是空字符串,所以当您执行index into "videos"
时,您说使用videos
索引但空字符串类型。
将索引请求更改为:
index into "video" / "videos" id 1 fields ("title" -> "Worth It", "artist" -> "Fifth Harmony"
修正了它。
如果您不熟悉索引和类型,这应该会有所帮助: https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping.html