我有一些包含序列的文档,例如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
而非两个词素radio
和test
.
有没有办法配置解析器不要寻找file
令牌?我试过了
ALTER TEXT SEARCH CONFIGURATION public.english
DROP MAPPING FOR file;
Run Code Online (Sandbox Code Playgroud)
......但它没有改变输出ts_debug
.如果有某种方法可以禁用file
,或者至少让它识别file
它认为构成目录名称的所有单词和所有单词,或者是否有办法让它将斜杠视为连字符或空格(没有性能损失)的regexp_replace
荷兰国际集团他们自己),这将是很有益的.
有没有办法获得有关句子中词汇位置和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.
我想在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 结合使用,但我找不到解决方案。你有想法吗?
我正在使用 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”是保留词吗?如果是这样,“转义”保留字的最佳方法是什么?
我有一个使用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) 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 字段包含在要点索引中,或者我不走运?
我对tsvector
字段(重新)感到困惑。这是很常见的,看文字的例子被连接成的tsvector字段,然后索引。如果您查找 PG 12 生成的列,您会发现快速显示tsvector
字段填充的示例。
既然这个字段的唯一目的就是支持索引,那为什么不用表达式构建索引,跳过向量列呢?我之前顺便问过这个问题(找不到),记得听到回复“这个专栏毫无意义”。这对我来说很有意义。最近,我一直在关注这篇文章的一些评论:
这件作品相当不错,顺便说一句。有这样的评论:
实现 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 而不是文件系统中构建倒排索引。我读到有关 GIN 索引的内容,它在 tsvector 列上构建这样的索引。
我可以手动构建 tsvector 值而不调用 to_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 将我的所有字符视为文本而不是试图聪明地处理数字和连字符?
我一直在寻找一种在sqlalchemy中使用tsvector的方法(就像INTEGER等其他类似的东西),但到目前为止我还不清楚如何做到这一点.我已经读过tsvector可以使用UserDefinedType实现为一个类型.经过一些尝试,我无处可去,有人有一个简单的方法来做到这一点?谢谢