使用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