Elasticsearch: دعم الإكراه JSON -> String

تم إنشاؤها على ٢٩ يوليو ٢٠١٦  ·  3تعليقات  ·  مصدر: elastic/elasticsearch

بدأت المحادثة المستمرة هنا: https://discuss.elastic.co/t/coerce-object-to-string/56748/3

وصف المشكلة بما في ذلك السلوك المتوقع مقابل السلوك الفعلي :

هل ترغب في أن تكون قادرًا على التعامل مع حقل كائن باعتباره سلسلة في ضوء التعيين التالي:

          "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 التقييمات