问题标签 [trigram]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
173 浏览

postgresql - 为什么 PostgreSQL 不使用我的 gin_trgm_ops 索引来加速这个查询?

我在 Postgres 中使用 trigram 相似性来帮助我灵活地搜索数据库中的名称,并且(更重要的是)从自然语言句子中提取名称并将它们与数据库记录匹配。

使用此查询,我得到了第一个可靠地工作并且快速完成的任务:

上面的查询使用了name_column这个语句的索引:

CREATE INDEX name_sim_idx ON table_with_names USING GIN (name_column gin_trgm_ops);

我的其他任务(从完整的句子中灵活地提取名称匹配)让我感到沮丧。似乎包含该函数的pg_trgm 模块similarity()也有一个word_similarity()函数,它完全可以做我需要做的事情。事实上,我用这个查询完成了任务:

然而。虽然我列出的第一个查询(相似性查找,而不是提取)非常快(1 毫秒),但第二个查询在 ~350 毫秒时非常慢,并且不会使用我的 index

我不明白为什么第二个查询不会使用我的 trgm 索引。我曾尝试使用 来抑制 Seq Scan SET enable_seqscan = off;,但这不起作用。据我所知,Postgres 的文档声称<%如果您想使用索引来加速word_similarity()查询,则该运算符是正确的运算符,但他们的所有示例都以相反的方向使用它。

例如,文档显示:

WHERE 'search text' <% column

而我需要做相反的事情:

WHERE column <% 'search text

我想用 trgm 相似性做些什么?或者我在这里旋转我的轮子。我无法想象为什么我的索引不能在这里使用。这对我来说是 0 意义。希望有人能帮我解决这个问题!提前致谢。

编辑:这是 a_horse_with_no_name 建议的执行计划

0 投票
0 回答
69 浏览

python - 在 Django 中匹配包含标签的数组字段作为 Trigram 只接受文本而不接受列表

基本上我需要将请求的产品标签列表与其他产品标签列表匹配,并准备查询集以反映为类似产品。

模型.py

视图.py

与标题字段匹配有效,但一旦我尝试使用“标签”和 product.tags 进行匹配,它就会引发错误

示例标签列表看起来像 [motor,helmet,bluetooth,speakers]

0 投票
0 回答
26 浏览

pandas - Python使用一列中最常用的3个单词的组合向数据框添加新列

我只是 python 的初学者,我想了解更多关于它的信息。基本上我有一个数据框,其中包含客户的一些查询

查询ID 简短的介绍
1234 呜呜呜
1235 特拉拉

我想在数据框中添加一个新列,该列将显示最常用的 3 个单词的组合,该列包含在每行的简短描述中的简短描述。我解决问题的方法如下:

不幸的是,对于大文件,检索结果需要一段时间。有人可以帮助我找到实现此结果的最有效方法吗?在此先感谢您的帮助。此致

0 投票
1 回答
71 浏览

postgresql - Postgresql - 与三元组的相似性(pg_trgm)

我目前正在我的应用程序上实现搜索功能。我有一个包含用户名和全名字段的用户表。我想搜索具有最佳相似性的用户(来自用户名或全名)。我在 stackoverflow 上进行了很多搜索,发现了一个非常高效的实现: https ://stackoverflow.com/a/44856792/5979369

我使用了这段代码并创建了这个搜索查询:

我有一个用户名是mariazirita的用户,但是当我使用这个查询搜索mar时它不会返回任何内容。如果我搜索maria,它已经返回了用户。

当我搜索marma时,我可以做些什么来改进此查询以返回用户?

谢谢

0 投票
0 回答
22 浏览

python-3.x - 如何在过滤的查询集中使用 TrigramSimilarity?

我有三个相互关联的模型:

地址/models.py

提供者/models.py

我已经搜索了为街道服务的提供商:

这一切都很好,因为我们正在寻找所有街道location__name 记录中的对象,我会对结果感到满意,但我不明白如何将过滤后的街道列表按城市放入 TrigramSimilarity 方法street = Street.objects。过滤器(城镇 = 城镇)

我希望我的搜索结果在这个表现中起作用:

但是这种构造给了我一个异常值:子查询应该只返回一列

有人知道如何解决这个问题吗?也许有人遇到过这个?

0 投票
2 回答
198 浏览

sql - Postgres Select ILIKE %text% 在大字符串行上很慢

我有一个只有 7 列的表,其中一列存储每一行​​的长文本数据。该文本列数据的平均字符长度约为 1500 个字符。这个表有 500.000 行。

当我使用选择查询而不使用该文本列时,没有问题,查询按预期需要 10 秒。

但是,如果我将这个长文本列添加到我的查询中,比如Select * from table_1完成这个查询并用 dataadapter 填充数据表需要 3 或 4 分钟。

为什么我需要查找所有长文本列记录?因为我需要对其使用文本过滤器,例如:

我应该怎么做才能加快这一进程?表分区可以解决这个速度问题吗?还是我应该寻找索引?

0 投票
0 回答
47 浏览

database - Postgres 使用索引搜索 jsonb

我是 postgres jsonb 操作的新手。我使用 jsonb 列在 Postgres 中存储一些数据,该列具有如下灵活的元数据。我想搜索不同的唯一元数据(键:值对)

结果应该如下所示,不同的,按升序排列。我希望它使用一些索引是有效的。

我下面的解决方案命中了搜索索引,但排序和 distinct 不会命中任何索引,因为它们是来自 jsonb 的处理值。

感谢您对这个问题的任何想法。谢谢!

0 投票
1 回答
76 浏览

postgresql - 是否可以在 Postgres 中执行并行查询,使用 union all 查询分区表?

您好,我正在通过使用带有 trigram 模块和分区表的 GIN 索引来使用 postgres 作为搜索引擎,并且我正在尝试并行化查询,但无论我设置什么查询总是顺序的,欢迎任何想法。查看图片了解更多信息。这是一个查询(test_trgm_x 是每个包含大约 550k 行的分区)

在此处输入图像描述

0 投票
2 回答
40 浏览

sql - ILIKE查询对LEFT外连接关系的优化

对 postgres 来说很新,似乎在这里有问题,我不确定该往哪个方向发展。

我有一个导致一些性能问题的查询,我不知道如何优化它。

查询实际上很简单:

我想查找名称中包含 777 的公司的所有交易。数据库中有大约 2000 万笔交易和大约 200 家公司。

即使我们的 LIMIT 为 10,查询当前也会超时。我相信这是因为 ILIKE 没有使用索引,所以它非常慢。

这是否是您可能希望将 WHERE 过滤器添加到 JOIN 的实例?我已经对此进行了测试,如果找到记录,它可以快速运行。如果没有找到记录,它会再次超时。

我们应该研究一种可以提高速度的索引吗?

0 投票
2 回答
78 浏览

postgresql - Postgres三元组搜索很慢

我有一张大约有 300 万行的表格。我在表的多个列上创建了单个 gin 索引。

我正在运行以下查询(简化为在条件中使用单列),但大约需要 4 秒:

输出查询计划为:

我不明白为什么在第一步从 search_idx 检索时行没有排序并且限制为 10,然后从客户表中仅获取 10 行(而不是 2126 行)

任何想法如何使这个查询更快。我尝试了 gist index,但没有看到性能提升。我还尝试将 work_mem 从 4MB 增加到 32MB,我可以看到 1 秒的改进,但不会更多。我还注意到,即使我在 SELECT 子句中删除 c.id,postgres 也不会执行仅索引扫描,并且仍会与主表连接。

谢谢您的帮助。

更新 1:在 Laurenz Albe 以下建议后,查询性能有所提高,现在约为 600 毫秒。计划现在看起来像这样: