我目前正在使用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.b
,a.c
等访问。
这可能不是您最初想到的一个多字段的方式,因为您可能只是认为a
,b
和c
是同级的 sibling ,就像一种序列。因此值得一读。
在elastic4s中,您可以仅在所需的任何字段上使用.fields
,然后这些字段将与父字段组合在一起成为一个多字段。因此,您的示例将被重写。
client.execute {
createIndex("foo").mappings(
mapping("bar").fields(
textField("baz").fields(
textField("inner1") analyzer PatternAnalyzer,
textField("inner2") index NotAnalyzed
)
)
)
}
注意
as
是fields
的别名,我认为fields
更具可读性,因此我在这里使用了它。
关于scala - Elastic4s 5.x中的多字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42561918/