- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最后两个字段用于对一个使用 tsvector 数据类型的索引,另一个使用文本数据类型的索引。
我想对名称或 ID 执行查询。我正在做这个
SELECT * FROM foo WHERE foo.searchtext @@ to_tsquery('1234 & abcd');
它工作正常,但现在我希望删除拼写错误,例如,如果名称是 abcd 我输入 abbd 那么它应该获得所有可能的值。我见过 pg_tgrm()
但它 does not使用整数或 tsvector
还有其他选项,我尝试使用 pg_tgrm()
,就像我将索引存储在另一个字段 searchtextstring 中,类型为文本和查询
select *
from foo
where searchtextstring % '123' and searchtextstring % 'abbd';
但我认为这效率不高,而且对于拼写错误也不起作用。
如何使用 to_tsquery 处理拼写错误?
最佳答案
全文搜索仅忽略词干和大小写的差异,它不允许您根据相似性查找匹配项。
pg_trgm
是正确的选择。
我使用这个示例表:
CREATE TABLE foo (id integer PRIMARY KEY, searchtextstring text);
INSERT INTO foo VALUES (1, 'something 0987');
INSERT INTO foo VALUES (2, 'abbd 1224');
CREATE INDEX ON foo USING gist (searchtextstring gist_trgm_ops);
这太小了,PostgreSQL 将始终使用顺序扫描,因此,如果可能的话,让我们强制 PostgreSQL 使用索引(以便我们可以模拟更大的表):
SET enable_seqscan = off;
现在我们来查询:
EXPLAIN (COSTS off)
SELECT * FROM foo WHERE searchtextstring % '1234'
AND searchtextstring % 'abcd';
QUERY PLAN
--------------------------------------------------------
Index Scan using foo_searchtextstring_idx on foo
Index Cond: ((searchtextstring % '1234'::text)
AND (searchtextstring % 'abcd'::text))
(2 rows)
索引用得很好,一次索引扫描!
但是查询没有返回任何行:
SELECT * FROM foo WHERE searchtextstring % '1234'
AND searchtextstring % 'abcd';
id | searchtextstring
----+------------------
(0 rows)
这并不是因为“它不起作用”,而是因为单词不够相似。不要忘记,四个字母的单词中没有那么多卦象,所以如果你改变一个字母,它们就不再那么相似了。这并不奇怪,对吧?
所以我们必须降低相似度阈值才能得到结果;
SET pg_trgm.similarity_threshold = 0.1;
SELECT * FROM foo WHERE searchtextstring % '1234'
AND searchtextstring % 'abcd';
id | searchtextstring
----+------------------
2 | abbd 1224
(1 row)
关于postgresql - 在 postgresql 中使用 to_tsvector 和 to_tsquery 处理拼写错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50344254/
我想通过用语言环境拼写数字来本地化数字,最后使用了 ICU4J。我在许多地区都取得了成功,但似乎没有在格鲁吉亚、土耳其或阿拉伯语等地区完成。 ULocale locale = new ULocale(
我正在研究具有端点的 swagger API 规范: /authorizations 我也想为这个端点定义一个替代拼写(授权)。这可能吗?或者我是否需要为每个拼写定义一个单独的路由? /authori
我正在研究具有端点的 swagger API 规范: /authorizations 我也想为这个端点定义一个替代拼写(授权)。这可能吗?或者我是否需要为每个拼写定义一个单独的路由? /authori
我使用 Yahoo BOSS 的时间很短。这是一个简单的搜索 API,但拼写建议支持确实不那么强大。周围的人是否有任何关于在 BOSS 上获得更好的拼写建议的想法。 最佳答案 不幸的是,甚至在几年后,
问题如下:我正在编写一个强力解密器来破解一些 super secret 代码(这是一场竞赛,而不是犯罪),结果证明这是不可能的:树中的节点太多需要被搜查。为了克服这个问题,我认为检查中间“解决方案”以
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我是一名优秀的程序员,十分优秀!