在实体内索引数组的最佳实践

问题描述 投票:0回答:1

我目前正在通过 SQL 中的 Logstash 将数据提取到 Elasticsearch。

我当前正在使用的实体有一个标签列表,它基本上是一个 id 列表。在logstash管道中,我的输入中有以下内容

statement => " SELECT 
  p.*
  STRING_AGG(pt.TagId, ',') AS Tags 
FROM 
  Products p   
  LEFT JOIN ProductTags pt ON p.Id = pt.ProductId 
GROUP BY 
  p.*

并在过滤器中

filter {
    mutate {
        split => { "Tags" => "," }
    }
    mutate {
        convert => { "Tags" => "integer" }
    }
}

在 kibana 中,Tags 字段是一个 Integer,在 json 中看起来像这样。

 "Tags": [
      6,
      772,
      777
    ],

我的想法是,在我的应用程序中,我将允许按标签进行过滤,因此我将按标签 ID 进行搜索。

我看到一篇文章说,如果要查找特定数字(这不是范围查询),由于关键字的原因,最好将此数组作为字符串数组。这是真的?将它们保存为字符串数组而不是整数数组更好吗?

谢谢!

elasticsearch logstash kibana
1个回答
0
投票

如果您知道您只会进行术语查询(而不是范围查询),那么最好将数字映射为关键字,因为查询会得到更好的优化。这是由 elastic here 明确记录的。

© www.soinside.com 2019 - 2024. All rights reserved.