标签: tsvector

禁用PostgreSQL 8.4 tsvector解析器的`file`令牌类型

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

select * from doc
where to_tsvector('english',body) @@ to_tsvector('english','radio')
Run Code Online (Sandbox Code Playgroud)

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

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

ALTER TEXT SEARCH CONFIGURATION public.english
    DROP MAPPING FOR file;
Run Code Online (Sandbox Code Playgroud)

......但它没有改变输出ts_debug.如果有某种方法可以禁用file,或者至少让它识别file它认为构成目录名称的所有单词和所有单词,或者是否有办法让它将斜杠视为连字符或空格(没有性能损失)的regexp_replace荷兰国际集团他们自己),这将是很有益的.

postgresql parsing tsvector

6
推荐指数
1
解决办法
486
查看次数

从tsvector中检索词条出现的位置和数量

有没有办法获得有关句子中词汇位置和tsvector出现次数的信息?

像这样的东西

SELECT *
FROM get_position(to_tsvector('english', 'The Fat Rats'), to_tsquery('Rats'));
Run Code Online (Sandbox Code Playgroud)

将返回3

SELECT *
FROM get_occurrences(to_tsvector('english', 'The Fat Rats'), to_tsquery('Rats'));
Run Code Online (Sandbox Code Playgroud)

将返回1.

sql postgresql full-text-search tsvector

6
推荐指数
1
解决办法
641
查看次数

PostgreSQL中全文搜索结合模糊搜索

我想在postgresql中结合一种模糊搜索来实现全文搜索。对于我的测试区,我跟进了这篇文章:https ://blog.lateral.io/2015/05/full-text-search-in-milliseconds-with-postgresql/ 一切正常。但有时我在搜索字符串中有空格和没有空格的搜索案例,如下所示:

在我的“标题”栏中有一个像“ test123 ”这样的条目。我的搜索字符串看起来像' test 123 ',里面有一个空格。我怎样才能在这个测试用例中获得成功?

我的 search-sql-query 看起来像:

SELECT * 
FROM test, plainto_tsquery('test:*&123:*') as q 
WHERE (tsv @@ q)

result: 0 rows
Run Code Online (Sandbox Code Playgroud)

所以我试图弄清楚是否可以将 pg_trgm 与 ts_vector 结合使用,但我找不到解决方案。你有想法吗?

sql postgresql full-text-search tsvector pg-trgm

6
推荐指数
1
解决办法
3769
查看次数

PostgreSQL全文搜索和保留字,保留一些单词

我正在使用 Postgresql 和英语字典进行完整的测试搜索。当我想接收带有一些英语单词的记录时,我得到了真实的结果。

所以:

SELECT id FROM table1 WHERE ts_vector1 @@ to_tsquery('it')
Run Code Online (Sandbox Code Playgroud)

返回 0 个结果。

SELECT id FROM table1 WHERE ts_vector1 @@ to_tsquery('specialist & it')
Run Code Online (Sandbox Code Playgroud)

返回超过 0 个结果(表和索引中存在单词“it”)。ts_vector1 创建如下:

ts_vector1 = to_tsvector('english', some_text_column)
Run Code Online (Sandbox Code Playgroud)

“it”是保留词吗?如果是这样,“转义”保留字的最佳方法是什么?

postgresql full-text-search tsvector

5
推荐指数
1
解决办法
3158
查看次数

输入"空白"的"数字类型的无效输入语法"

我有一个使用NUMERIC类型的三列表.但是,其中两个没有任何东西(即空).这是代码:

CREATE TABLE profiles(
ID SMALLINT,
FID SMALLINT,
SURVEY VARCHAR(100),
PROFILE VARCHAR(100),
TYPE VARCHAR(100),
SOURCE VARCHAR(100),
NR_TRACES NUMERIC,
TRACE_SPACE_M NUMERIC,
LENGTH_M NUMERIC,
IMAGES TEXT,
COMMENTS TEXT
);

ALTER TABLE profiles ADD ts tsvector;

UPDATE profiles SET ts = to_tsvector('english', ID || ' ' || FID || ' ' || coalesce(SURVEY,'') || ' ' || coalesce(PROFILE,'') || ' ' || coalesce(TYPE,'') || ' ' || coalesce(SOURCE,'') || ' ' || coalesce(NR_TRACES,'') || ' ' || coalesce(TRACE_SPACE_M,'') || ' ' || coalesce(LENGTH_M,'') …
Run Code Online (Sandbox Code Playgroud)

coalesce tsvector postgresql-9.2

5
推荐指数
1
解决办法
3万
查看次数

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

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

我有一个表格来跟踪不同客户拥有的资产。

CREATE TABLE asset (
    id serial PRIMARY KEY,
    description text NOT NULL,
    customer_id uuid NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

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

SELECT *
FROM asset
WHERE to_tsvector('english', asset.description) @@ plainto_tsvector('english', ?)
AND asset.customer_id = ?;
Run Code Online (Sandbox Code Playgroud)

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

CREATE INDEX idx_name ON asset(customer_id, description);
Run Code Online (Sandbox Code Playgroud)

只能在 tsvector 上创建索引:

CREATE INDEX idx_name ON asset USING gist(to_tsvector('english', asset.description));
Run Code Online (Sandbox Code Playgroud)

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

postgresql tsvector psql

5
推荐指数
1
解决办法
1464
查看次数

包含 tsvector 字段的可能原因?

我对tsvector字段(重新)感到困惑。这是常见的,看文字的例子被连接成的tsvector字段,然后索引。如果您查找 PG 12 生成的列,您会发现快速显示tsvector字段填充的示例。

既然这个字段的唯一目的就是支持索引,那为什么不用表达式构建索引,跳过向量列呢?我之前顺便问过这个问题(找不到),记得听到回复“这个专栏毫无意义”。这对我来说很有意义。最近,我一直在关注这篇文章的一些评论:

使用 PostgreSQL 12 微调全文搜索

这件作品相当不错,顺便说一句。有这样的评论:

实现 tsvector 的一个原因是不在重新检查时评估表达式,这本身可能非常昂贵。

在解释分析中勾选'Recheck Cond',条件可以被真正检查,因此条件(to_tsvector)将被计算。

\d t1
Table “public.t1”
Column | Type    | Collation | Nullable | Default
--–----+---------+----------–+----------+---
id     | integer |           |          |
t      | text    |           |          |
Indexes:
  "t1_to_tsvector_idx" gin (to_tsvector('english'::regconfig, t))

explain analyze select * from t1 where to_tsvector(‘english’, t) @@ to_tsquery(‘english’,’foo’);
Run Code Online (Sandbox Code Playgroud)
\d t1
Table “public.t1”
Column | Type    | Collation | Nullable | Default
--–----+---------+----------–+----------+---
id …
Run Code Online (Sandbox Code Playgroud)

postgresql full-text-search tsvector

5
推荐指数
1
解决办法
639
查看次数

PostgreSQL:是否可以手动构建 tsvector 值?

我想实现一个使用向量空间模型的信息检索系统,但具有多术语标记和自定义术语加权函数。

我正在考虑在 PostgreSQL 而不是文件系统中构建倒排索引。我读到有关 GIN 索引的内容,它在 tsvector 列上构建这样的索引。

我可以手动构建 tsvector 值而不调用 to_tsvector 函数,以便我可以使用自定义标记和自定义权重构建我的“自定义”向量吗?

postgresql inverted-index tsvector

5
推荐指数
1
解决办法
627
查看次数

如何在带有数字的字符串上使用 tsvector?

我想在包含所有包含数字的字符串的列上使用 postgres tsquery,如下所示:

FRUIT-239476234
Run Code Online (Sandbox Code Playgroud)

如果我尝试从中创建一个 tsquery:

select to_tsquery('FRUIT-239476234');
Run Code Online (Sandbox Code Playgroud)

我得到的是:

'fruit' & '-239476234'
Run Code Online (Sandbox Code Playgroud)

我希望能够仅通过该值的数字部分进行搜索,如下所示:

239476234
Run Code Online (Sandbox Code Playgroud)

似乎它无法匹配它,因为它将我的连字符解释为“负号”并且不认为239476234匹配-239476234。我怎样才能告诉 postgres 将我的所有字符视为文本而不是试图聪明地处理数字和连字符?

postgresql tsvector

5
推荐指数
2
解决办法
1709
查看次数

sqlalchemy中的tsvector

我一直在寻找一种在sqlalchemy中使用tsvector的方法(就像INTEGER等其他类似的东西),但到目前为止我还不清楚如何做到这一点.我已经读过tsvector可以使用UserDefinedType实现为一个类型.经过一些尝试,我无处可去,有人有一个简单的方法来做到这一点?谢谢

sqlalchemy tsvector

4
推荐指数
1
解决办法
2344
查看次数