Postgresql 一列中包含多个单词的Postgres fulltextsearch

Postgresql 一列中包含多个单词的Postgres fulltextsearch,postgresql,select,tsvector,Postgresql,Select,Tsvector,我想在postgres数据库上创建全文选择查询。 例如,我想找到所有标题为“哈利波特”的书。如果我只是用全文搜索查找Harry,它运行得很快。 e、 g 但是,如果我尝试合并一个像《哈利·波特》这样的标题,我的查询时间就快到了(比如一分钟) 我犯了什么错?我需要这个fulltextsearch还包括一个或多个单词的组合 如果存在比在一个查询中组合两个单词更好的解决方案,如 SELECT * FROM books WHERE to_tsvector('simple', cast(title AS

我想在postgres数据库上创建全文选择查询。 例如,我想找到所有标题为“哈利波特”的书。如果我只是用全文搜索查找Harry,它运行得很快。 e、 g

但是,如果我尝试合并一个像《哈利·波特》这样的标题,我的查询时间就快到了(比如一分钟)

我犯了什么错?我需要这个fulltextsearch还包括一个或多个单词的组合


如果存在比在一个查询中组合两个单词更好的解决方案,如

 SELECT * FROM books WHERE to_tsvector('simple', cast(title AS text)) @@ plainto_tsquery('simple',cast('harry potter' AS text))
编辑:找到了一些内容: 我的《哈利波特》大约有110.000个数据(实际上相当于书中的100万个数据)。 如果我查找例如Ice Fire,数据库中只有300个结果,我的查询运行速度非常快。 从数据库返回结果集可能有问题?
我实际上使用了极限100

您应该使用短语搜索:

WHERE to_tsvector('simple', title) @@ to_tsquery('simple', 'harry <-> potter')
WHERE to_tsvector('simple',title)@@to_tsquery('simple','harry potter'))

相同的高响应时间:/n然后您需要在
上设置一个GIN索引,以_tsvector('simple',title)
。我添加了一个GIN索引。这个问题还是一样吗
SELECT*FROM books WHERE to_tsvector('simple',cast(title AS text))@@plainto_tsquery('simple',cast('harry potter'AS text))
?索引表达式必须与
@
左侧的表达式完全相同。使用
EXPLAIN
查看是否使用了索引。GIN可以使用finde,但仍然存在另一个问题。“如果有比在一个查询中组合两个词更好的解决方案,比如:“‘更好’”用什么方式?将它们组合到一个查询中仍然很慢吗?在这种情况下,发布一个解释(分析,缓冲区)。或者它很快,但你只是因为某种原因觉得它很难看?
 SELECT * FROM books WHERE to_tsvector('simple', cast(title AS text)) @@ plainto_tsquery('simple',cast('harry potter' AS text))
WHERE to_tsvector('simple', title) @@ to_tsquery('simple', 'harry <-> potter')