问题标签 [tsvector]

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 回答
1714 浏览

postgresql - 从 tsvector 列中检索最常见的关键字

我正在考虑将 tsvector 列添加到现有表中,该表将包含同一表中多个列的可能搜索词(例如 tsvector 列将等于to_tsvector(header || ' ' || body || ' ' || footer))。在我决定这样做之前,我的一个要求是我能够在表中的所有记录中找到最流行的关键字。

有没有类似于 tsquery 的东西可以在所有记录中找到我最流行的关键字?

0 投票
1 回答
547 浏览

postgresql - 禁用 PostgreSQL 8.4 tsvector 解析器的 `file` 标记类型

我有一些包含序列的文档,例如radio/tested我想在查询中返回命中,例如

不幸的是,默认解析器将radio/tested其作为file令牌(尽管在 Windows 环境中),因此它与上述查询不匹配。当我ts_debug在它上面运行时,我看到它被识别为一个文件,并且词位最终是radio/tested而不是两个词位radiotest.

有没有办法配置解析器不查找file令牌?我试过了

...但它并没有改变ts_debug. 如果有某种禁用的方法file,或者至少让它识别file它认为构成目录名称的所有单词,或者如果有办法让它将斜杠视为连字符或空格(不会影响性能regexp_replaceing 他们自己)这将非常有帮助。

0 投票
1 回答
6284 浏览

postgresql - Postgres full text search across multiple related tables

This may be a very simplistic question, so apologies in advance, but I am very new to database usage.

I'd like to have Postgres run its full text search across multiple joined tables. Imagine something like a model User, with related models UserProfile and UserInfo. The search would only be for Users, but would include information from UserProfile and UserInfo.

I'm planning on using a gin index for the search. I'm unclear, however, on whether I'm going to need a separate tsvector column in the User table to hold the aggregated tsvectors from across the tables, and to setup triggers to keep it up to date. Or if it's possible to create an index without a tsvector column that'll keep itself up to date whenever any of the relevant fields in any of the relevant tables change. Also, any tips on the syntax of the command to create all this would be much appreciated as well.

0 投票
1 回答
489 浏览

postgresql - 有没有一种简单的方法可以消除 tsvector 中出现的词素?

我在表中有一个 tsvector 列,我希望能够从 tsvector 中删除一个词素。

我已经开始使用 ts_stat 来重建一个新的 tsvector,但它似乎相当复杂。

有没有简单的方法来做到这一点?

0 投票
2 回答
2971 浏览

ruby-on-rails - 使用特定于数据库的数据类型进行 Rails 迁移

我目前正在运行 Rails 迁移,我正在添加特定于 Postgres 的数据类型,即 tsvector。它以 Postgres 对其内置文本搜索功能所期望的形式保存搜索信息。

这是我的迁移中的一行:

一切似乎都运行良好,搜索也能正常工作。然而,当我打开 schema.rb 时,我得到了:

这使我无法在用户表上运行单元测试,并且考虑到 schema.rb 应该是我的数据库的权威定义,这也让我觉得看起来非常危险。

我注意到有许多 Rails 插件似乎使用与我期望的相同的方法来存储 tsvector,例如 tsearchable。我真的只是在没有测试并且没有对我的数据库的权威定义的情况下陷入困境吗?

0 投票
1 回答
14132 浏览

ruby-on-rails - Ruby on Rails:不使用 find 时如何为 SQL 清理字符串?

我正在尝试清理一个涉及用户输入的字符串,而不必在可能的情况下手动制作我自己的可能有问题的正则表达式,但是,如果这是唯一的方法,如果有人能指出我正确的方向,我也将不胜感激不太可能丢失任何东西的正则表达式。Rails 中有许多方法可以让你输入本地 SQL 命令,人们如何逃避用户输入?

我要问的问题是一个广泛的问题,但在我的特殊情况下,我正在使用我的 Postgres 数据库中的一个列,据我所知,Rails 本身并不理解该列,即 tsvector,它包含纯文本搜索信息。Rails 能够像字符串一样对其进行读写,但是,与字符串不同的是,当我在模型中执行 vector= 之类的操作时,它似乎不会自动转义它。

例如,当我执行 model.name='::',其中 name 是一个字符串时,它可以正常工作。当我执行 model.vector='::' 时,它会出错:

这似乎是分号缺少转义导致的问题,我可以手动设置vector='::' 很好。

我也有一个好主意,也许我可以这样称呼:

但是,这种语法不起作用,因为原始 SQL 命令无权访问 find 使用 ? 转义和输入字符串的方法。标记。

这让我觉得与使用任何类型的用户输入调用 connection.execute 相同,因为这一切都归结为清理字符串,但我似乎找不到任何方法来手动调用 Rails 的 SQL 字符串清理方法。任何人都可以提供任何建议吗?

0 投票
1 回答
736 浏览

postgresql - PostgreSQL 全文搜索随机删除词位

(所有这些都是在 Ubuntu 10.04,FWIW 上使用 PostgreSQL 9.0.1 完成的。)

我已经尝试为 PostgreSQL 编写我自己的词法函数,专门用于名称,基于双变音位算法。为了生成 C lexize 函数,我从 dict_xsyn 示例开始,基本上将双变音位换成了同义词查找。

但也许有 20% 的时间to_tsvector被调用,它似乎在删除词位。例如,我创建了一个包含美国人口普查局名单的表格。

然后我们可以添加一个向量列,并用to_tsvector我的变音位字典填充它:

一堆 vec 字段只是空的!实际上:

我可以进行批量更新,然后重复计算不匹配的字段,每次都得到不同的计数,因为不同的行没有计算出真正的向量。

但我认为我的 lexize 函数本身还可以吗?

我可以一遍又一遍地做到这一点,每次都得到 0 个不匹配。

我正在创建相关的文本搜索词典和配置:

几乎直接来自 dict_xsyn 示例。

这是怎么回事?我该怎么做才能弄清楚这些东西被丢弃在哪里?

补充:刚刚用 9.1 试过这个。to_tsvector 产生哑 tsvector 的速率大大降低(5 个(只有 5 个,而不是 5k)到 80000+ 个记录中的 7000 个记录)。但他们还在那里。

0 投票
4 回答
13139 浏览

postgresql - 匹配以前缀结尾的短语和全文搜索

我正在寻找一种方法来模拟SELECT * FROM table WHERE attr LIKE '%text%'在 PostgreSQL 中使用 tsvector 之类的东西。

我在不使用字典的情况下创建了一个 tsvector 属性。现在,像...这样的查询

...将返回所有标题,如“Physics”、“PHP”等。但是我如何创建一个查询来返回标题以“Zend Fram”开头的所有记录(例如应该返回“Zend Framework”)?

当然,我可以使用类似的东西:

不过,这似乎有点尴尬。

因此,问题是:有没有一种方法可以使用以下内容来制定上面给出的查询:

0 投票
1 回答
1464 浏览

postgresql - PostgreSQL tsvector tsquery 错误?

这是错误还是功能?我在 tsvector 属性上创建了一个索引(不使用字典)。

查询

返回“基本本能”。但是,查询

根本不返回任何记录。我不明白为什么第二个(更通用的查询)返回的结果比第一个查询少?

再见

0 投票
1 回答
724 浏览

sql - 如何优化此全文搜索查询?(tsvector) (150 万行)

我目前在 PostgreSQL 中有一个全文搜索查询(见下文),它扫描 150 万行的单个表以查找与“所有”术语以及“任何”术语匹配的所有项目。

查询在几乎没有结果的查询上以中等速度(~2-3 秒)正确执行。并且以可怕的速度获得 100,000+ 匹配的结果(约 15-100 秒)

查询首先按术语类型(所有匹配的术语,然后匹配的任何术语)对结果进行排序,然后通过 ts_rank_cd 的相关性计算对结果进行子排序。(以及更简单的变体,它按可以索引的已知列进行排序,例如持续时间)

所有相关列都已编入索引,系统监控显示内存和 cpu 没有得到充分利用,瓶颈似乎是磁盘 IO。

服务器是 Ubuntu Server 10.04。可以根据需要通过后端轻松地动态增加内存和 CPU 功率以满足解决方案。

目前,数据库在生产中是静态的,并且不会在生产服务器上写入数据库。因此,如果有益的话,可以完全准确地生成保持准确的索引。

任何有助于找到任何改进途径的帮助将不胜感激。可应要求及时提供附加信息。