1

我一直在使用 elastic4s 进行数据检索,并开始研究测试我当前的代码。我正在尝试创建一个本地客户端,然后我可以使用它(并传递给我的参与者),这对于测试来说比在构建服务器上部署弹性集群并保持它更易于管理。

下面是我到目前为止一直在尝试的代码。这应该启动一个简单的实例,创建一个索引,将视频添加到“视频”索引中,然后检索它。

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 集群使用相同类型的查询,所以我认为我的设置方式有问题。

4

1 回答 1

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

于 2015-12-11T22:19:15.327 回答