postgresql - Postgres fulltextsearch 在一列中有多个单词
问题描述
我想在 postgres 数据库上创建全文选择查询。例如,我想查找标题为“哈利波特”的所有书籍。如果我只是通过全文搜索来查找 Harry,它会运行得很快。例如
SELECT * FROM books WHERE to_tsvector('simple', cast(title AS text)) @@ plainto_tsquery('simple',cast('harry' AS text))
但是,如果我尝试组合一个像哈利波特这样的标题,我的查询就没有时间了(比如一分钟)
SELECT * FROM books WHERE to_tsvector('simple', cast(title AS text)) @@ plainto_tsquery('simple',cast('harry' AS text)) AND to_tsvector('simple', cast(title AS text)) @@ plainto_tsquery('simple',cast('potter' AS text))
我的错误是什么?我还需要这个全文搜索一个或多个单词的组合。
如果存在比在一个查询中组合两个单词更好的解决方案,例如
SELECT * FROM books WHERE to_tsvector('simple', cast(title AS text)) @@ plainto_tsquery('simple',cast('harry potter' AS text))
编辑:发现了一些东西:我的哈利波特的数量约为 110.000 个数据(实际上就像书中的 1 个 mio 数据)。如果我查找例如 Ice Fire,数据库中只有 300 个结果,而且我的查询运行速度非常快。也许它是关于从数据库返回的结果集的问题?我实际上使用限制 100。
解决方案
您应该使用短语搜索:
WHERE to_tsvector('simple', title) @@ to_tsquery('simple', 'harry <-> potter')
推荐阅读
- android - 如何防止系统字体大小更改对 Android 应用程序特定部分的影响?
- javascript - 如何传递值以形成动作 laravel
- ios - 根据 UIHierarchy 创建 UIElementQuery
- asp.net - 如何将材料日期选择器添加到.net webapp?
- video - JW Player 是否支持 h.265?
- python-3.x - discord.py osu stats 错误:命令引发异常:TypeError:列表索引必须是整数或切片,而不是 str
- c# - 按三个不同的版本部分分组和排序
- python - 在 pyqt5 中切换 QRadioButton:单击选中的单选按钮时取消选中
- java - 如何将本地可绘制图像传递给模型类?
- javascript - ReactJS onChange 函数在输入输入时未触发