我目前正在通过 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 进行搜索。
我看到一篇文章说,如果要查找特定数字(这不是范围查询),由于关键字的原因,最好将此数组作为字符串数组。这是真的?将它们保存为字符串数组而不是整数数组更好吗?
谢谢!
如果您知道您只会进行术语查询(而不是范围查询),那么最好将数字映射为关键字,因为查询会得到更好的优化。这是由 elastic here 明确记录的。