问题标签 [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.
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 建议的执行计划
python - 在 Django 中匹配包含标签的数组字段作为 Trigram 只接受文本而不接受列表
基本上我需要将请求的产品标签列表与其他产品标签列表匹配,并准备查询集以反映为类似产品。
模型.py
视图.py
与标题字段匹配有效,但一旦我尝试使用“标签”和 product.tags 进行匹配,它就会引发错误
示例标签列表看起来像 [motor,helmet,bluetooth,speakers]
pandas - Python使用一列中最常用的3个单词的组合向数据框添加新列
我只是 python 的初学者,我想了解更多关于它的信息。基本上我有一个数据框,其中包含客户的一些查询
查询ID | 简短的介绍 |
---|---|
1234 | 呜呜呜 |
1235 | 特拉拉 |
我想在数据框中添加一个新列,该列将显示最常用的 3 个单词的组合,该列包含在每行的简短描述中的简短描述。我解决问题的方法如下:
不幸的是,对于大文件,检索结果需要一段时间。有人可以帮助我找到实现此结果的最有效方法吗?在此先感谢您的帮助。此致
postgresql - Postgresql - 与三元组的相似性(pg_trgm)
我目前正在我的应用程序上实现搜索功能。我有一个包含用户名和全名字段的用户表。我想搜索具有最佳相似性的用户(来自用户名或全名)。我在 stackoverflow 上进行了很多搜索,发现了一个非常高效的实现: https ://stackoverflow.com/a/44856792/5979369
我使用了这段代码并创建了这个搜索查询:
我有一个用户名是mariazirita的用户,但是当我使用这个查询搜索mar时它不会返回任何内容。如果我搜索maria,它已经返回了用户。
当我搜索mar或ma时,我可以做些什么来改进此查询以返回用户?
谢谢
python-3.x - 如何在过滤的查询集中使用 TrigramSimilarity?
我有三个相互关联的模型:
地址/models.py:
提供者/models.py:
我已经搜索了为街道服务的提供商:
这一切都很好,因为我们正在寻找所有街道location__name 记录中的对象,我会对结果感到满意,但我不明白如何将过滤后的街道列表按城市放入 TrigramSimilarity 方法street = Street.objects。过滤器(城镇 = 城镇)
我希望我的搜索结果在这个表现中起作用:
但是这种构造给了我一个异常值:子查询应该只返回一列
有人知道如何解决这个问题吗?也许有人遇到过这个?
sql - Postgres Select ILIKE %text% 在大字符串行上很慢
我有一个只有 7 列的表,其中一列存储每一行的长文本数据。该文本列数据的平均字符长度约为 1500 个字符。这个表有 500.000 行。
当我使用选择查询而不使用该文本列时,没有问题,查询按预期需要 10 秒。
但是,如果我将这个长文本列添加到我的查询中,比如Select * from table_1
完成这个查询并用 dataadapter 填充数据表需要 3 或 4 分钟。
为什么我需要查找所有长文本列记录?因为我需要对其使用文本过滤器,例如:
我应该怎么做才能加快这一进程?表分区可以解决这个速度问题吗?还是我应该寻找索引?
database - Postgres 使用索引搜索 jsonb
我是 postgres jsonb 操作的新手。我使用 jsonb 列在 Postgres 中存储一些数据,该列具有如下灵活的元数据。我想搜索不同的唯一元数据(键:值对)
结果应该如下所示,不同的,按升序排列。我希望它使用一些索引是有效的。
我下面的解决方案命中了搜索索引,但排序和 distinct 不会命中任何索引,因为它们是来自 jsonb 的处理值。
感谢您对这个问题的任何想法。谢谢!
sql - ILIKE查询对LEFT外连接关系的优化
对 postgres 来说很新,似乎在这里有问题,我不确定该往哪个方向发展。
我有一个导致一些性能问题的查询,我不知道如何优化它。
查询实际上很简单:
我想查找名称中包含 777 的公司的所有交易。数据库中有大约 2000 万笔交易和大约 200 家公司。
即使我们的 LIMIT 为 10,查询当前也会超时。我相信这是因为 ILIKE 没有使用索引,所以它非常慢。
这是否是您可能希望将 WHERE 过滤器添加到 JOIN 的实例?我已经对此进行了测试,如果找到记录,它可以快速运行。如果没有找到记录,它会再次超时。
我们应该研究一种可以提高速度的索引吗?
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 毫秒。计划现在看起来像这样: