PostgreSQL 全文搜索从选择中删除行
PostgreSQL full-text search drops rows from selection
全文搜索不显示某些词位的任何值。
虽然这段代码returns true
:
SELECT to_tsvector('ispell_russian', description)
@@ to_tsquery('ispell_russian', 'сам')
FROM callcenter.points_cardsservices
INNER JOIN callcenter.units ON recipientname = name
WHERE units.deptid = 5
AND id=366020;
以下选择的结果为空:
SELECT *
FROM callcenter.points_cardsservices
INNER JOIN callcenter.units ON recipientname = name
WHERE units.deptid = 5
AND id=366020
AND to_tsvector('ispell_russian', description)
@@ to_tsquery('ispell_russian', 'сам');
我要搜索的词曾经在停用词列表中。它会导致这种问题吗?此外,to_tsvector('ispell_russian', description)
上有一个索引。
您永远找不到停用词,因为它甚至在搜索开始之前就被过滤掉了。
但你说它曾用作停用词。如果您更改了停用词列表,那么您已经更改了在索引中使用的 IMMUTABLE
(!) 函数 to_tsvector('ispell_russian', )
的行为。
如果更改索引不可变函数的行为,索引就会损坏。您将不得不使用 REINDEX INDEX
重建索引。
全文搜索不显示某些词位的任何值。
虽然这段代码returns true
:
SELECT to_tsvector('ispell_russian', description)
@@ to_tsquery('ispell_russian', 'сам')
FROM callcenter.points_cardsservices
INNER JOIN callcenter.units ON recipientname = name
WHERE units.deptid = 5
AND id=366020;
以下选择的结果为空:
SELECT *
FROM callcenter.points_cardsservices
INNER JOIN callcenter.units ON recipientname = name
WHERE units.deptid = 5
AND id=366020
AND to_tsvector('ispell_russian', description)
@@ to_tsquery('ispell_russian', 'сам');
我要搜索的词曾经在停用词列表中。它会导致这种问题吗?此外,to_tsvector('ispell_russian', description)
上有一个索引。
您永远找不到停用词,因为它甚至在搜索开始之前就被过滤掉了。
但你说它曾用作停用词。如果您更改了停用词列表,那么您已经更改了在索引中使用的 IMMUTABLE
(!) 函数 to_tsvector('ispell_russian', )
的行为。
如果更改索引不可变函数的行为,索引就会损坏。您将不得不使用 REINDEX INDEX
重建索引。