【问题标题】:Which is better performance, String OR Array in elasticsearch?elasticsearch中的String OR Array哪个性能更好?
【发布时间】:2020-06-24 11:56:28
【问题描述】:

映射

"brandKeyword" : {
          "type" : "text",
          "norms" : false,
          "analyzer" : "nori_custom"}

值示例1

["apple", "samsung", "lg"]

值示例2

"apple samsung lg"

这两个值的例子哪个表现更好?

如果其中一个更快,为什么?

Elasticsearch 版本:7.2.0

数据节点:30

协调节点(搜索):8

协调节点(用于索引):4

主节点:3

摄取节点:1

主分片:15

副本:3

每个节点的分片:2

平均文档数:324,000,000

平均每秒请求数:60

【问题讨论】:

  • 不可能说,这取决于太多因素(文档数量、节点大小、每秒客户端请求数、查询复杂度等)。你能解释一下你到底想达到什么目标吗?
  • @Val 我正在检查性能调整元素以提高搜索性能。
  • 你能解释一下是什么让你认为这部分特别妨碍你的表现吗?
  • @Val 上面提到的两个例子给出了相同的搜索结果,只是好奇是否有任何性能差异。
  • @YunjinJang 你能在两个查询的搜索响应中提供took 参数的值吗?

标签: elasticsearch


【解决方案1】:

找出答案的最佳方法就是尝试一下。使用相同数量的文档创建两个索引,并在每个索引上测试您的查询。

在您的情况下,您可以创建第二个索引,只需使用将字符串转换为数组的摄取管道将现有索引重新索引为第二个索引,如下所示:

PUT _ingest/pipeline/to-array
{
  "processors": [
    {
      "split": {
        "field": "brandKeyword",
        "separator": "\\s+" 
      }
    }
  ]
}

然后你可以reindex你的数据进入第二个索引:

POST _reindex
{
  "source": {
    "index": "source"
  },
  "dest": {
    "index": "dest",
    "pipeline": "to-array"
  }
}

您现在有两个索引,一个以brandKeyword 作为字符串,另一个以brandKeyword 作为数组。您可以进行测试并找出哪个在您当前的环境中表现更好。

【讨论】:

    猜你喜欢
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 2014-09-30
    • 2015-06-10
    • 2019-05-06
    • 2013-03-12
    相关资源
    最近更新 更多