1

我目前正在使用 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 []

答案ElasticSearch 5: MapperParserException with multi_field and documentation here https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html说要使用“字段”,但我找不到如何在 elastic4s 中执行此操作。

4

1 回答 1

4

在 Elasticsearch 中,任何多字段都有一个类似于父字段的字段,然后是辅助字段。主要字段(顺便说一下,主要和次要是我的术语),访问a和次要字段访问a.ba.c等等。

这可能不是您最初想象的多字段的方式,因为您可能只是认为有a, b,c作为一种序列的兄弟姐妹。所以它值得理解这一点。

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

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

请注意,这as是一个别名fields,我认为fields它更具可读性,所以我在这里使用了它。

于 2017-03-02T23:34:48.917 回答