scala - Elastic4s 5.x中的多字段

标签 scala elasticsearch elastic4s

我目前正在使用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和此处的文档https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html表示改为使用“字段”,但我找不到在elastic4s中如何执行此操作。

最佳答案

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

这可能不是您最初想到的一个多字段的方式,因为您可能只是认为abc是同级的 sibling ,就像一种序列。因此值得一读。

在elastic4s中,您可以仅在所需的任何字段上使用.fields,然后这些字段将与父字段组合在一起成为一个多字段。因此,您的示例将被重写。

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

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

关于scala - Elastic4s 5.x中的多字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42561918/

相关文章:

scala - 按类型过滤集合的最佳方法是什么?

java - 抽象的目的是什么?

scala - Elastic4s Ngram映射

java - SBT 在尝试运行简单的 "Hello!"示例脚本时给出 java.lang.NullPointerException

list - scala 返回第一个列表中的一些

date - Elasticsearch - 查询没有指定时区的日期

elasticsearch - 无法为 Kibana 安装 sense 插件

elasticsearch - elasticsearch中_id和_uid有什么区别?

elasticsearch - 使用Elastic4s客户端查找索引中特定字段的所有不同值

scala - elastic4s:如何添加分析器/过滤器为german_phonebook进行分析?