Elastic4s 中的多字段 5.x

Multifield in Elastic4s 5.x

我目前正在使用 Elastic4s v5.0,它仍然具有用于以不止一种方式索引字段的多字段类型。

elasticClient.execute(createIndex("foo") mappings (
  mapping("bar").as(
    multiField("baz").as(
      textField("baz") analyzer myAnalyzer,
      textField("original") index NotAnalyzed
    )
  )
)

但是,我收到以下错误:

No handler for type [multi_field] declared on field []

答案 and documentation here https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html 说使用 "fields" 代替,但我找不到如何在 elastic4s 中执行此操作。

在 Elasticsearch 中,任何多字段都有一个 primary 字段,它有点像父字段,然后它有辅助字段。主要字段(主要和次要是我的术语)通过 a 访问,次要字段通过 a.ba.c 等访问。

这可能不是您最初想象的多字段的样子,因为您可能只是认为有 abc 作为兄弟姐妹顺序。所以值得理解这一点。

在elastic4s中,你可以在任何你想要的字段上使用.fields,然后这些字段将与parent组合成为一个多字段。因此,您重写的示例将是。

  client.execute {
    createIndex("foo").mappings(
      mapping("bar").fields(
        textField("baz").fields(
          textField("inner1") analyzer PatternAnalyzer,
          textField("inner2") index NotAnalyzed
        )
      )
    )
  }

注意 asfields 的别名,我认为 fields 更具可读性,所以我在这里使用它。