2017-03-02 4 views
1

私は現在、Elastic4s v5.0を使用していますが、それでもフィールドを複数の方法でインデックスするために使用されるマルチフィールドタイプがあります。Multifield in Elastic4s 5.x

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でこれを行う方法を見つけることができません。

答えて

2

Elasticsearchでは、どのマルチフィールドも、親フィールドのような一種であり、次に二次フィールドを持つの一次フィールドを持っています。プライマリフィールド(プライマリとセカンダリは私の用語です)はaでアクセスされ、セカンダリフィールドはa.ba.cなどとアクセスされます。あなただけabcシーケンスの一種のような兄弟としてそこだと思うかもしれないので

これ

は、あなたが最初のマルチフィールドがあることを想像するだろうかではないかもしれません。それで、これを理解する価値がある。

elastic4sでは、任意のフィールドで.fieldsを使用すると、親のと組み合わせて複数のフィールドになります。だから、あなたの例は書き直されたでしょう。 asfieldsの別名であると私はfieldsがより読みやすいので、私はここでそれを使用したと思われることを

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

注意。

+0

あなたの説明は非常に読んで楽しいでした、ありがとう – cowboybebop

関連する問題