gpt4 book ai didi

elasticsearch - elasticsearch 与 RDBMS 中的多个术语搜索

转载 作者:行者123 更新时间:2023-11-29 02:55:20 24 4
gpt4 key购买 nike

RDBMS 的现状

假设我在主要用于搜索目的的企业环境中有一个包含 30-40 列的遗留 RDBMS 表。在现实生活中可能有几张表,但让我们保持简单。我有几十个,甚至可能有数百个不同的程序,每个程序都对这个表执行自己的查询,每个程序查看一组略有不同的字段。

为什么现状会受到伤害

  1. 我们的 DBA 竭尽全力确保所有这些不同的查询都能正常工作,方法是为每个查询定制索引。
  2. 开发人员和 DBA 之间产生了不信任,因为 DBA 想知道将执行哪些新查询,以便他们可以检查他们的索引,而开发人员只想尽快推出新功能。
  3. 第 2 点有时会归结为强制开发人员使用所有静态绑定(bind)查询的努力,以便 DBA 肯定有机会首先评估性能。

呃...

这与 ES 索引相比如何?

因此,假设我在 elasticsearch 索引中对所有 30-40 列进行索引,我是否可以仅搜索一个术语或以与一组 RDBMS 索引大致相同的方式搜索多个术语?

最佳答案

So assuming I index all 30-40 columns in an elasticsearch index, is it true that I can search either just one term or many in a way that is roughly as performant as a set of RDBMS indexes?

简而言之,是的。

在 Elasticsearch 中,首选的方法是使用 filter,假设这些字段/列包含“枚举”类型的数据(例如。statusgender, department, etc), 而你不想使用全文搜索来查询它们。 (添加全文搜索很简单,但需要您提前考虑适当的分析器、用户搜索模式等主题)

假设您在这里使用 term 过滤器:

curl localhost:9200 -d '{
"query" : {
"filtered" : {
"filter" : {
"term" : {
"department" : "marketing"
}
}
}
}
}'

现在,术语过滤器生成一个位集,用于存储特定文档是否匹配此过滤器 (1/0) 的信息。这个 bitset 具有三个重要特征:a) 它非常紧凑,b) 它非常容易缓存,c) 它允许 bitset 操作来组合过滤器。

Elasticsearch 将使用 filter cache以加快对此过滤器的访问。

过滤器和位集的好处在于,如果您要执行稍微不同的查询:

curl localhost:9200 -d '{
"query" : {
"filtered" : {
"filter" : {
"bool" : {
"must": [
"term" : {
"department" : "marketing"
},
"term" : {
"status" : "active"
}
]
}
}
}
}
}'

department 字段上的过滤器将被重新使用并从缓存中加载,一个新的缓存位集将在 status 字段上创建,下一次,两者都会从缓存中加载并使用位集操作进行评估。

Elasticsearch 提供了一个 Warmer API因此您可以使用已知查询非常有效地“预加载”您的缓存。

过滤器缓存的统计数据是 Nodes Stats API 的一部分.

关于elasticsearch - elasticsearch 与 RDBMS 中的多个术语搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15204302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com