Elasticsearch: 強制JSON->文字列をサポート

作成日 2016年07月29日  ·  3コメント  ·  ソース: elastic/elasticsearch

継続的な会話はここから始まりました: https

予想される動作と実際の動作を含む問題の説明

次のマッピングを指定して、オブジェクトフィールドを文字列として処理できるようにしたいと考えています。

          "properties": {
            "severity": {
              "index": "not_analyzed",
              "type": "string"
            },
            "metadata": {
              "type": "string"
              "coerce": true
            }
          }

次のドキュメントのインデックスを作成します。

{
    "severity": "ERROR",
    "metadata": {
        "someKey": "someValue",
        "someKey": {
            "some nested key": "some nested value"
        } 
    }
}

ドキュメントを検索可能な文字列としてmetadata下に保存する必要があります。

現在、文字列に何かを強制することはできません。

:SearcMapping >enhancement

最も参考になるコメント

私はこの機能のファンではありません。 文字列フィールドでオブジェクトを文字列に自動的に強制変換することもできますが、これは私の意見ではかなり厄介です。elasticsearchがマッピングに準拠していないドキュメントを拒否しないとユーザーが不満を言っていることは確かに想像できます。 または、数値が文字列を自動的に解析する必要があるなど、この動作を有効にするためのマッピングオプションが必要になりますが、マッピングに関するオプションがすでに多すぎるため、どちらも好きではありません。 エスケープされたjsonを含む文字列を提供するためにクライアントに依存したいと思います。

全てのコメント3件

現在、上記のマッピングは有効とは見なされていません。 ESは次のように爆発します:

MapperParsingException[Failed to parse mapping [event]: Mapping definition for [metadata] has unsupported parameters:  [coerce : true]]; nested: MapperParsingException[Mapping definition for [metadata] has unsupported parameters:  [coerce : true]];
    at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$1.execute(MetaDataCreateIndexService.java:332)
    at org.elasticsearch.cluster.ClusterStateUpdateTask.execute(ClusterStateUpdateTask.java:45)
    at org.elasticsearch.cluster.service.InternalClusterService.runTasksForExecutor(InternalClusterService.java:468)
    at org.elasticsearch.cluster.service.InternalClusterService$UpdateTask.run(InternalClusterService.java:772)
    at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:231)
    at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:194)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:744)
Caused by: MapperParsingException[Mapping definition for [metadata] has unsupported parameters:  [coerce : true]]
    at org.elasticsearch.index.mapper.DocumentMapperParser.checkNoRemainingFields(DocumentMapperParser.java:171)
    at org.elasticsearch.index.mapper.DocumentMapperParser.checkNoRemainingFields(DocumentMapperParser.java:165)
    at org.elasticsearch.index.mapper.object.ObjectMapper$TypeParser.parseProperties(ObjectMapper.java:307)
    at org.elasticsearch.index.mapper.object.ObjectMapper$TypeParser.parseObjectOrDocumentTypeProperties(ObjectMapper.java:218)
    at org.elasticsearch.index.mapper.object.ObjectMapper$TypeParser.parse(ObjectMapper.java:193)
    at org.elasticsearch.index.mapper.object.ObjectMapper$TypeParser.parseProperties(ObjectMapper.java:305)
    at org.elasticsearch.index.mapper.object.ObjectMapper$TypeParser.parseObjectOrDocumentTypeProperties(ObjectMapper.java:218)
    at org.elasticsearch.index.mapper.object.RootObjectMapper$TypeParser.parse(RootObjectMapper.java:139)
    at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:118)
    at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:99)
    at org.elasticsearch.index.mapper.MapperService.parse(MapperService.java:498)
    at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:288)
    at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$1.execute(MetaDataCreateIndexService.java:329)

私はこの機能のファンではありません。 文字列フィールドでオブジェクトを文字列に自動的に強制変換することもできますが、これは私の意見ではかなり厄介です。elasticsearchがマッピングに準拠していないドキュメントを拒否しないとユーザーが不満を言っていることは確かに想像できます。 または、数値が文字列を自動的に解析する必要があるなど、この動作を有効にするためのマッピングオプションが必要になりますが、マッピングに関するオプションがすでに多すぎるため、どちらも好きではありません。 エスケープされたjsonを含む文字列を提供するためにクライアントに依存したいと思います。

これはhttps://github.com/elastic/elasticsearch/issues/17918の複製であり、これを行うことに反対しました。

このページは役に立ちましたか?
0 / 5 - 0 評価