scala - 嵌入式ES实例中的完成搜索

标签 scala elasticsearch completion elastic4s

我试图让完成搜索在嵌入式实例中进行单元测试。我正在使用elastic4s和elasticsearch 2.0.x

我的工作代码如下:

val nIndex = create index "musicbrainz" shards 5 replicas 1 mappings(
  "artist_title" as(
    "artist" typed StringType,
    "artist_suggest" typed CompletionType analyzer "simple" searchAnalyzer "simple" payloads false preserveSeparators true preservePositionIncrements true maxInputLen 50,

    "title" typed StringType
  ) size true numericDetection true boostNullValue 1.2 boost "myboost"
)

client.execute(nIndex)

val bulkInsert = bulk(
  index into "artist_title"/"musicbrainz" id 1 fields("title" -> "Just the Way You Are", "artist" -> "Bruno Mars", "artist_suggest" -> Map("input" -> Seq("bruno", "mars"), "output" -> Seq("Bruno Mars"))) refresh true
)

client.execute(
  bulkInsert
).await

val res = client.execute {
  search in "artist_title"/"musicbrainz" limit 1 query bool {
    must (
      matchQuery("artist", "Bruno Mars")
    )
  }
}.await

val artistSugg = completionSuggestion.field("artist_suggest").text("b")
val resp = client.execute {
  search in "artist_title"/"musicbrainz" suggestions  {
    artistSugg
  }
}.await
val it = resp.suggestion(artistSugg).entry("bruno").options.map(x => x.text).distinct

到达最后一行时,代码将与消息Field [artist_suggest] is not a completion suggest field断开。但是,如果我看nIndex._mappings(0)._fields,它包含一个CompletionFieldDefinition。 MatchQuery返回数据,所以我知道它已正确添加,我似乎无法弄清楚如何使完成建议程序正常工作。从我在scala中拥有的内容来看,它似乎与文档匹配:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html

最佳答案

再次阅读文档,我意识到我错过了一些东西。完成建议程序会搜索索引中的所有文档,因此,当我将search in "artist_title"/"musicbrainz" suggestions更改为search in "musicbrainz" suggestions时,它将起作用。

关于scala - 嵌入式ES实例中的完成搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34275242/

相关文章:

ios - 在完成 block 中使用 iOS Swift 泛型

Bash 完成使 'cd' 命令从其他正在运行的 shell 完成工作目录?

java - "Could not find main method from given launch configuration"使用Java+Scala+Slick2D时

scala - 实现 "live"流以驱动 Akka 2.4 持久性查询

scala - Scala Universe 设计中的类型边界

search - 我应该如何考虑搜索引擎索引?

operating-system - 处理调度策略时Completion time和response time有什么区别

scala - sbt 子项目的项目目录

elasticsearch - 根据Elasticsearch中不同索引中存在的字段进行查询

elasticsearch - 可以在 Elastic Search 上创建的索引数量有限制吗?