【问题标题】:Potentials performance issues with scala and elasticsearchscala 和 elasticsearch 的潜在性能问题
【发布时间】:2014-04-01 07:14:35
【问题描述】:

你好 StackOverflowers !

我得到了一个具有以下结构的 elasticSearch 文档,以便能够获取特定语言的标题翻译:

    {
        "contents": {
            "title": {
                "es": "hola",
                "fr": "bonjour",
                "de": "halo"
            }
        }
    }

我的问题是这种结构不容易有效地转换为 scala 案例类 (我不希望语​​言的名称成为键的名称..)

    case class Title(es:String, fr:String, de:String)
    case class Contents(title:Title)
    case class R00tJsonObject(contents:Contents)

我因此修改了我的文档结构:

        "contents": {
            "title": [
                {
                    "lang": "es",
                    "value": "hola"
                },
                {
                    "lang": "fr",
                    "value": "bonjour"
                },
                {
                    "lang": "de",
                    "value": "Halo!"
                }
            ]
        }

所以我现在可以将每个翻译存储为元组列表,如下所示:

    case class Title(lang:String, value:String)
    case class Contents(title:List[Title])
    case class R00tJsonObject(contents:Contents)

我通过执行这个弹性搜索查询来请求每种语言,例如法语:

"query": {
    "bool": {
        "must": [{
            "term": {
                "contents.title.lang": "fr"
            }
        }, {
            "term": {
                "contents.title.value": "bonjour"
            }
        }]
    }
} 

你觉得这个修改怎么样?鉴于此查询看起来必须浏览所有数组标题才能找到好的翻译,我是否应该担心潜在的性能问题?

需要你的建议:)

【问题讨论】:

    标签: json scala elasticsearch


    【解决方案1】:

    我对 Elasticsearch 的了解还不够,无法知道您的修改是否真的会影响性能,但它确实看起来很丑。我认为问题来自尝试将您的 JSON 文档与案例类匹配。相反,您应该使用Map,将 JSON 映射为:

    {
      "es": "hola",
      "fr": "bonjour",
      "de": "halo"
    }
    

    Map[String, String],或者更好的是Map[LanguageCode, String],其中LanguageCode 是您的应用程序将支持的语言的枚举。这将使您在 Elasticsearch 中的结构保持简单,同时最大限度地减少在 Scala 中添加新语言时必须更改的代码量。

    【讨论】:

    • 你是对的。谢谢你的帮助:)
    猜你喜欢
    • 2011-06-21
    • 2019-08-25
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    相关资源
    最近更新 更多