问题标签 [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 投票
2 回答
2105 浏览

postgresql - 如果任何列在 PostgreSQL 全文搜索中没有数据,则 to_tsvector 为空

我正在尝试实现 Postgre SQL 全文搜索,但如果使用 to_tsvector 设置的任何列为空,我将遇到整个文档返回空的问题。

我有一个如下所示的表:

我正在创建文档:

我期望看到的结果是:

但我实际上得到的是:

这似乎是一个错误。在描述中添加任何单个字母或数字或任何内容都会使文档正确显示,但单个列中的空值会导致整个文档为空。为什么需要描述才能搜索标题和描述?我是不是误会了什么?

0 投票
0 回答
261 浏览

postgresql - tsv 列中的相似性

我需要一些帮助,让 SQL 使用 pgAdminIII 在 PostgreSQL 9.5.1 中工作。我所拥有的是statusFacebook 状态的一列(数据类型,文本),其格式为输入格式,另一列status_tsv存储状态列的 tsvector,已删除停用词和词干。

我想通过比较自连接中 tsvector 列的相似性来找到相似的状态。

到目前为止,我已经尝试使用 regexp_replace 函数与 pg_trgm 相似性搜索相结合,以仅在 tsvector 列中保留 a-zA-Z 字符集,但这不起作用,因为 regexp_replace 说它不能执行 tsvector 列,所以我已经将 tsv 列的数据类型更改为文本。

现在的问题是它只比较每行中第一个单词的相似度而忽略其余的,显然这没有用,我需要它来比较整行。

我刚才的 SQL 看起来像

这样status_similarity做 `(regexp_replace(x.tsvector_status, '[^a-zA-Z]', '', 'g'), regexp_replace(y.tsvector_status, '[^a-zA-Z]', '', 'g')) 我确定只保留 tsvector_status 列中的 a-zA-Z。

我必须改变什么才能获得这种返回相似状态'?

0 投票
1 回答
726 浏览

postgresql - PostgreSQL Full Text Search: Cant get a partial match of tsvector

Here's the problem:

I have a table in PostgreSQL with adresses in plain text and tsvectors. And i'm trying to find an adress record in a query like this.

But the problem is that I don't know anything about the adress in a query. I can't define where a country, a city or a street is in the incoming string. I don't know what order of words the adress has, or does it contain extra words.

I can only search for countries and cities, but if the incoming string contains street, index or anything else, the search returns nothing because of the conjunction of all vector tokens. At the same time, I simply can't delete some string parts or use disjunction, because I never know where in the string the extra words are.

So, is there any way to construct a tsquery to return some best matches for the incoming string? Or maybe partial matches? When i tried to force it to use OR instead of AND everywhere in tsquery, it returned me nearly the whole database. I need vectors intersection... in postgresql.

0 投票
1 回答
1827 浏览

postgresql - 如何在 Postgresql 中创建多列 GiST 索引

postgresql文档指定一个 GiST 索引可以有多个列,但没有提供这可能是什么样子的示例。

我有一张表格,可以跟踪不同客户拥有的资产。

我正在编写一个查询,允许客户根据描述中的单词搜索资产。

如果这是一个非 tsvector 查询,我会建立一个简单的多列索引

我只能在 tsvector 上创建索引:

但是,查询优化器不使用 gist 索引,因为它似乎想先进行customer_id过滤。有没有办法可以将非 tsvector 字段包含customer_id在 gist 索引中,或者我不走运?

0 投票
1 回答
87 浏览

postgresql - Postgresql tsvector结构

瞧这里。

我正在尝试利用 tsvector 来计算术语的频率。我想我快到了,但我找不到从 tsvector 结构中获取术语的方法。

我所做的是,在创建 tsvector 列之后: select term_tsv, count(*) count from (select unnest(term_tsv) term_tsv from document_tsv) t group by term_tsv order by count desc; 结果是这样的: stem_tsv | count ------------------------+------- (3,{9},{D}) | 1 我因为不知道括号代表什么样的表达式而迷失了方向。谁能告诉我如何从外壳中提取术语?谢谢你。

0 投票
1 回答
6398 浏览

postgresql - postgresql tsvector 部分文本匹配

我正在尝试创建一个 PostgreSQL 查询以在 tsvector 列中查找部分文本。

我有一个这样的 tsvector 值"'89' 'TT7' 'test123'",我需要找到任何包含“%es%”的行。

我怎样才能做到这一点?

我试过了

0 投票
1 回答
786 浏览

postgresql - Postgresql下用to_tsquery搜索奇怪的结果

搜索类似pro-physik.detsquery 的表达式时,我得到了一个奇怪的结果。

如果我pro-physik:*通过 tsquery 要求,我想获得所有以 . 开头的条目pro-physik。不幸的是,那些条目pro-physik.de丢失了。

这里有 2 个例子来说明这个问题:

查询一:

结果1:(false应该是true

查询 2:

结果 2:true

有谁知道我该如何解决这个问题?

0 投票
0 回答
96 浏览

postgresql - Postgres:基于词位推导本体

有没有办法从 Postgres 中的 tsvector 列中获取出现统计信息?

例如,让我们采用以下三个 tsvector:

我想找到每两个词位组合,包括它们的出现计数,它们至少一起出现两次,以便查询结果

还有一种方法可以考虑词位之间的距离,以便 ('sun' 'happy') 组合得分更高?

感谢每一个帮助

安迪

0 投票
2 回答
401 浏览

postgresql - Postgresql 编码和 tsvector (Ubuntu)

EDIT2:我将保留其余文本以进行上下文化,但我发现问题与我的备份或数据模型无关。我已经成功地复制了以下问题:

我已将编码设置为 UTF8,创建了具有特定语言环境的数据库,在 ts_vector 上使用了“葡萄牙语”,但我仍然没有得到任何结果。在我的 PC 上在相同的情况下创建数据库(datcollat​​e 和 datctype pt_PT.utf8,但没有 template0)它可以工作。问题可以是template0吗?如果我尝试做

我明白了。

数据库创建失败:错误:新排序规则 (pt_PT.utf8) 与模板数据库 (en_US.UTF-8) 的排序规则不兼容提示:使用与模板数据库中相同的排序规则,或使用 template0 作为模板。

我认为它与编码和 tsvector 有关......我只是不知道是什么。


首先,我已经搜索过并且我有一些想法,我只是需要一些帮助,因为我对 postgresql 和 Ubuntu 不太熟悉。对于设置,我有我的 PC(带有 Windows 和 Linux15.10)和一个远程 PC,它为服务器提供服务(带有 ubuntu 14.04.4 LTS)所以,我有一个数据库,我已经完成了备份(使用编码 UTF8),我可以恢复没有任何问题。该数据库有一个具有 tsvector 类型(关键字)的表和一个接收 varchar 作为参数(以及其他参数)的函数。在我的电脑上(在两个操作系统上)我调用这个函数并得到预期的结果,例如:

返回

注意特殊字符

一个

但是,使用相同的脚本来创建表/函数和相同的恢复,当我使用相同的参数调用相同的函数时,我得到 0 行。对我来说,最奇怪的是我在服务器上有这一行:

我的意思是......关键字表上有一个â!

在 Windows 上:

在我的 UBUNTU 上:

在服务器上:

所以..是的,三种不同的编码。Portugues Brazil 1252 是 <=> 到 WIN1252,据我记得读过,它“像”UTF8 的“子类型”(我不知道这里的语法)。由于它适用于这种编码和 pt_PT.utf8,所以问题可能出在 en_US.UTF-8 上吗?我尝试使用编码 'LATIN1' 和 TEMPLATE=t​​emplate0 进行创建,但在恢复时我收到错误消息,指出某些使用 UTF8 编码的特殊字符没有“翻译”到 LATIN1。令我困惑的是,这些行返回正确的字符,如 à、ê 等。但搜索失败。

我还可以做些什么?我见过有人说要更改语言环境并重新安装 postgresql,但由于服务器不是我的,所以这不是一个真正的选择。

非常感谢!

编辑:我创建了一个新的数据库只是为了测试并得到了这个:

做的时候

我明白了

所以,我想这是这个非常具体的服务器的问题。和,

最后,服务器的语言环境:

0 投票
1 回答
1205 浏览

postgresql - 如何重新创建最初由 tsvector_update_trigger 填充的 tsvector 列

我正在运行 Postgres 9.4。

我有一个名为 main_search_index_col 的列,由该触发器填充:

我继续创建了一个名为 unaccent_english (public.unaccent_english) 的新文本搜索配置来替换 pg_catalog.english

我已经删除了上面的触发器并使用 public.unaccent_english 而不是 pg_catalog.english 重做

在 the_entries 上删除触发器 main_vector_update;

但据我了解,除非更新行或​​添加新行,否则不会更改 main_search_index_col 中的任何值。

相反,我想通过并更新每一行的 main_search_index_col,或者删除该列并完全重新创建它并填充它,就好像它的新表单中的触发器一直存在一样。

如何使 main_search_index_col 列的内容对新触发器正确?

另外我如何查看 tsvector_update_trigger 的确切定义?我有一种感觉,如果我能阅读它的定义,它可能有助于制定我自己的解决方案。