- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
三元组索引的表,如果查询中存在大小写混合或 ILike 则不起作用。我不确定我错过了什么。有什么想法吗?
(我使用的是 PostgreSQL 9.6.2)
CREATE TABLE public.tbltest (
"tbltestId" int NOT null ,
"mystring1" text,
"mystring2" character varying,
CONSTRAINT "tbltest_pkey" PRIMARY KEY ("tbltestId")
);
insert into tbltest ("tbltestId","mystring1", "mystring2")
select x.id, x.id || ' Test', x.id || ' Test' from generate_series(1,100000) AS x(id);
CREATE EXTENSION pg_trgm;
CREATE INDEX tbltest_idx1 ON tbltest using gin ("mystring1" gin_trgm_ops);
CREATE INDEX tbltest_idx2 ON tbltest using gin ("mystring2" gin_trgm_ops);
在查询中使用小写文本有效,并使用索引
explain analyse
select * from tbltest
where "mystring2" Like '%test%';
QUERY PLAN |
-----------------------------------------------------------------------------------------------------------------------------|
Bitmap Heap Scan on tbltest (cost=20.08..56.68 rows=10 width=24) (actual time=29.846..29.846 rows=0 loops=1) |
Recheck Cond: ((mystring2)::text ~~ '%test%'::text) |
Rows Removed by Index Recheck: 100000 |
Heap Blocks: exact=726 |
-> Bitmap Index Scan on tbltest_idx2 (cost=0.00..20.07 rows=10 width=0) (actual time=12.709..12.709 rows=100000 loops=1) |
Index Cond: ((mystring2)::text ~~ '%test%'::text) |
Planning time: 0.086 ms |
Execution time: 29.875 ms |
如果我在搜索中添加混合大小写,则 Like 不会使用索引
explain analyse
select * from tbltest
where "mystring2" Like '%Test%';
QUERY PLAN |
--------------------------------------------------------------------------------------------------------------|
Seq Scan on tbltest (cost=0.00..1976.00 rows=99990 width=24) (actual time=0.011..33.376 rows=100000 loops=1) |
Filter: ((mystring2)::text ~~ '%Test%'::text) |
Planning time: 0.083 ms |
Execution time: 51.259 ms |
ILike也不使用索引
explain analyse
select * from tbltest
where "mystring2" ILike '%Test%';
QUERY PLAN |
--------------------------------------------------------------------------------------------------------------|
Seq Scan on tbltest (cost=0.00..1976.00 rows=99990 width=24) (actual time=0.012..87.038 rows=100000 loops=1) |
Filter: ((mystring2)::text ~~* '%Test%'::text) |
Planning time: 0.134 ms |
Execution time: 105.757 ms |
最佳答案
PostgreSQL 没有在最后两个查询中使用索引,因为这是处理查询的最佳方式,而不是因为它不能使用它。
在您的 EXPLAIN
输出中,您可以看到第一个查询返回零行(actual ... rows=0
),而其他两个查询返回每一行在表格中(actual ... rows=100000
)。
PostgreSQL 优化器的估计准确地反射(reflect)了这种情况。
由于它无论如何都必须访问表的大部分行,因此 PostgreSQL 知道如果它按顺序扫描表比使用更复杂的索引访问方法获得结果的成本要低得多。
关于Postgresql - 具有大小写混合的 trigram gin 索引的表或 ILike 不使用索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47425948/
main_text 是一个列表列表,其中包含已被词性标记的句子: main_text = [[('the', 'DT'), ('mad', 'JJ'), ('hatter', 'NN'), ('li
目标是按相似度顺序快速搜索相似值。 这是 Django 中的查询:Model.objects.annotate(similarity=TrigramSimilarity('field_name', q
我想像 google suggestions 这样的文本搜索. 我正在使用 PostgreSQL因为神奇Postgis . 我正在考虑使用 FTS , 但我看到它无法搜索 partial words
我在使用 Java 获取 trigrams 时遇到了一些问题。我的程序目前可以很好地获取 bigrams,但是当我尝试实现相同的方法结构并将其更改为获取 trigrams 时,它似乎无法正常工作。我希
我有这个例子,我想知道如何得到这个结果。我有文本并将其标记化,然后像这样收集二元组、三元组和四元组 import nltk from nltk import word_tokenize from nl
我创建了一个 trigram 索引,以便执行带有“like %text%”条件的查询,但 PostgreSQL 9.6 不使用该索引来执行查询。 CREATE EXTENSION pg_trgm;
我正在尝试使用 LinkedHashMap 创建一个 trigram 模型>其中 Entry 是最后输入的二元组的条目(其结构为:LinkedHashMap 现在的问题是,作为一个映射,它不存储多个键
我正在我们的系统中使用 ILIKE 进行模式匹配搜索,但由于表中的记录数量,它在某些表上变得太慢了。所以我正在按照这篇文章中的说明实现三元组索引 https://www.depesz.com/2011
我能够按相似度对三元组搜索进行排序,并按相似度分数进行过滤,这意味着必须有一些客观排名与每条记录相关联。我如何访问该分数? 我使用的代码: q = "search query" # ie "hone
在我的 PostgreSQL 数据库中,我有 slides 表,其中有 name 列。我想实现搜索。我在 PostgreSQL 中尝试了三元组索引。我创建了以下索引: CREATE INDEX ind
我在 elasticsearch 上创建了一个索引,如下所示: "settings" : { "number_of_shards": 1, "number_of_replicas":
三元组索引的表,如果查询中存在大小写混合或 ILike 则不起作用。我不确定我错过了什么。有什么想法吗? (我使用的是 PostgreSQL 9.6.2) CREATE TABLE public.tb
如标题所述,我想使用空格作为分隔符来解析表中的每一行(1 列,~1k 行)。每行包含一个短语。我想列出每个短语的所有 unigrams、bigrams 和 trigrams。下面的示例数据和所需的输出
postgres trigram documentation状态: The pg_trgm module provides GiST and GIN index operator classes th
所以我已经通过 Homebrew 安装了 Postgresql,看起来 contrib 目录丢失了。我读过的所有安装 Trigram 的教程都需要这个。 $ cd /usr/local/Cellar/
我使用 pg_trgm 模块中的 similarity() 函数在 C# 中为 PostgreSQL 数据库创建了一个模糊搜索。现在我想把这个搜索移植到 MySQL 数据库,但是 MySQL 没有类似
我在 Rails 上使用 pg_search gem 实现了三元组搜索。 https://github.com/Casecommons/pg_search 问题是有时返回结果的顺序根据显示 gem 文
所以基本上我设置了一个非常简单的测试表来测试 postgresql 9.1(股票 Debian 稳定版)中的三元组和全文索引功能。 下面是表和索引定义: -- Table: fulltextproba
我有一个单字母组(单个单词)、双字母组(两个单词)和三字母组(三个单词)的列表,我从一堆文档中提取出来。我的目标是静态分析报告,以及搜索我可以在这些文档上使用。 John Doe Xeon 5668x
我知道如何使用 NLTK 获取二元组和三元组搭配,并将它们应用到我自己的语料库中。代码如下。 我唯一的问题是如何打印出带有 PMI 值的 birgram?我多次搜索 NLTK 文档。要么我遗漏了什么,
我是一名优秀的程序员,十分优秀!