使用elastic4s本地客户端进行测试
Using elastic4s local client for testing
我一直在使用 elastic4s 进行数据检索,并开始研究对我当前代码的测试。我正在尝试创建一个本地客户端,然后我可以使用它(并传递给我的演员),与必须在构建服务器上部署弹性集群并保持它维护相比,它更易于测试管理。
下面是我到目前为止一直在尝试的代码。这应该启动一个简单的实例,创建一个索引,将视频添加到 "videos" 索引中,然后检索它。
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 集群使用相同类型的查询,所以我认为我的设置方式有问题。
您可以在 elastic4s 中使用许多帮助程序,它们将允许您创建嵌入式实例 - 查看任何单元测试。但是让我们假设您想手动完成所有操作。
你没有说 elasticsearch 是什么版本,但我假设是 1.7。
简单的答案是您在编制索引时没有设置类型。您必须指定一个,即使它是空字符串,所以当您执行 index into "videos"
时,您说的是使用 videos
index 但空字符串 输入。
因此将您的索引请求更改为:
index into "video" / "videos" id 1 fields ("title" -> "Worth It", "artist" -> "Fifth Harmony"
修复它。
如果您不熟悉索引和类型,这应该有所帮助:
https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping.html
我一直在使用 elastic4s 进行数据检索,并开始研究对我当前代码的测试。我正在尝试创建一个本地客户端,然后我可以使用它(并传递给我的演员),与必须在构建服务器上部署弹性集群并保持它维护相比,它更易于测试管理。
下面是我到目前为止一直在尝试的代码。这应该启动一个简单的实例,创建一个索引,将视频添加到 "videos" 索引中,然后检索它。
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 集群使用相同类型的查询,所以我认为我的设置方式有问题。
您可以在 elastic4s 中使用许多帮助程序,它们将允许您创建嵌入式实例 - 查看任何单元测试。但是让我们假设您想手动完成所有操作。
你没有说 elasticsearch 是什么版本,但我假设是 1.7。
简单的答案是您在编制索引时没有设置类型。您必须指定一个,即使它是空字符串,所以当您执行 index into "videos"
时,您说的是使用 videos
index 但空字符串 输入。
因此将您的索引请求更改为:
index into "video" / "videos" id 1 fields ("title" -> "Worth It", "artist" -> "Fifth Harmony"
修复它。
如果您不熟悉索引和类型,这应该有所帮助: https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping.html