Postgres全文搜索:如何在多个字段中搜索多个单词?

2024-03-18

我第一次使用 Postgresql,我正在尝试在我的网站中创建一个搜索引擎。我有这张表:

CREATE TABLE shop (
  id SERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  description TEXT,
  address TEXT NOT NULL,
  city TEXT NOT NULL
);

然后我为表的每个字段创建一个索引(这是正确的方法吗?或者我可以为所有字段创建一个索引?):

CREATE INDEX shop_name_fts ON shop USING gin(to_tsvector('italian', name));
CREATE INDEX shop_desc_fts ON shop USING gin(to_tsvector('italian', description));
CREATE INDEX shop_addr_fts ON shop USING gin(to_tsvector('italian', address));
CREATE INDEX shop_city_fts ON shop USING gin(to_tsvector('italian', city));

现在,如果我想在每个索引中搜索一个单词,那么 SQL 查询是什么?

我尝试了这个并且它有效:

SELECT id FROM shop WHERE to_tsvector(name) @@ to_tsquery('$word') OR
                          to_tsvector(description) @@ to_tsquery('$word') OR 
                          to_tsvector(address) @@ to_tsquery('$word') OR 
                          to_tsvector(city) @@ to_tsquery('$word')

是否存在更好的方法来做同样的事情? 我可以搜索吗to_tsquery分成多个to_tsvector? 我的一个朋友提出了一个解决方案,但它是针对 MySQL 数据库的:

SELECT * FROM shop WHERE MATCH(name, description, address, city) AGAINST('$word')

Postgresql 的解决方案是什么?

另外,我可以搜索多个吗?to_tsquery分成多个to_tsvector?如果我想搜索两个单词或多个单词,那么 SQL 查询是什么?我可以从 PHP 传递“两个单词”到 $word 吗?如果可以的话,它是如何工作的?它是搜索第一个单词和第二个单词还是第一个单词或第二个单词?


看起来您想要的实际上是搜索所有这些字段的串联。

您可以构建一个查询来执行此操作

... where to_tsvector('italian', name||' '||coalesce(decription,'')...) @@ to_tsquery('$word')

并在完全相同的计算上构建索引:

create index your_index on shop
using GIN(to_tsvector('italian',name||' '||coalesce(decription,'')...))

不要忘记使用coalesce在接受 NULL 值的列上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postgres全文搜索:如何在多个字段中搜索多个单词? 的相关文章

  • 多租户 Rails 应用:不同技术的优缺点是什么?

    我最初是为一位客户编写 Ruby on Rails 应用程序的 现在 我正在更改它 以便它可以用于不同的客户 我的最终目标是某些用户 不是我 可以单击按钮并创建一个新项目 然后生成所有必要的更改 新架构 新表 代码处理 无需任何人需要我编辑
  • 与 FOREIGN KEY 约束冲突

    我有两张桌子 学术界 CREATE TABLE dbo R ACADEMIE ID ACADEMIE dbo IDENTIFIANT NOT NULL LC ACADEMIE CODE dbo LIBELLE COURT NOT NULL
  • 使用 xmlagg 时出现子查询错误和太多值

    我在连接许多大型表中的所有数据时遇到问题 我昨天对此提出了问题 但不幸的是 listagg 似乎不是一个好的选择 链接子查询返回多行 https stackoverflow com questions 54651144 subquery r
  • 使用 Powershell SQL 将数据提取到 Excel

    我想使用 powershell 将数据从 SQL Server 提取到新的 excel 文件 对于小型数据集 我的代码可以工作 但某些表的行数超过 100 000 行 这将需要很长时间 我不在 SQl 服务器中使用该实用程序的原因是因为我想
  • SQL 插入失败 - 违反主键约束

    我在 SQL Insert 语句中看到一个非常奇怪的问题 我有一个简单的表 带有一个 ID 和 2 个日期时间 请参阅下面的创建脚本 CREATE TABLE dbo DATA POPULATION LOGS ID int IDENTITY
  • 将此 MySQL 查询转换为 PyGreSQL

    我正在开发一个 Ruby 应用程序 它使用 mysql 函数 XOR 和 BIT COUNT 不过 我现在需要在运行 PyGreSQL 的 Heroku 上运行该应用程序 我找不到任何可以帮助我的 PyGreSQL 文档 那么任何人都可以翻
  • 部署 dacpac 所需的权限

    我正在尝试使用 sqlpackage exe 在租户上部署 dacpac 目前 我正在向将部署此功能的帐户授予 SysAdmin 或 db owner 权限 并且它工作正常 但在生产中 如果目标租户数据库属于其他应用程序 我可能无法获得这些
  • 计算树中值的总和(递归查询)

    我在表员工 id name parentid 中有树结构 并且该表可以嵌套 employees 与另一个具有列 id employeeid quantity 的 Sales 表是一对多关系 每个员工都有销售数量 我想计算每个员工以及儿童员工
  • 将 docker-compose.yml 中的包安装到 docker 容器中

    我是 docker 和 docker compose 的初学者 我需要你的帮助 我正在使用 docker compose 制作 PHP NGINX PostgresQL symfony 开发环境 这里是 web image nginx 1
  • 按时间戳聚合

    搜索引擎优化 gt 搜索引擎优化 gt 付费 1 付费 gt 付费 gt 联盟 gt 付费 1 SEO gt 会员 1我有一个查询 结果包含客户 ID 号 营销渠道 时间戳和购买日期的数据 所以 结果可能看起来像这样 id marketin
  • 仅使用行中包含的值获取 JTable 中的行索引?

    在Java中 JTable中是否可以通过查找该行中包含的指定值来获取该行的索引 我正在使用自定义表格模型 例如 考虑一个包含三列和三行的表 Row 1 A B C Row 2 D E F Row 3 G H I 如果我只知道表中某处有一个值
  • Mysql 在给定日期时间范围内插入随机日期时间

    使用 SQL 我可以在给出范围的列中插入随机日期时间值吗 例如 给定一个范围2010 04 30 14 53 27 to 2012 04 30 14 53 27 我对范围部分感到困惑 因为我刚刚做了这个 INSERT INTO someta
  • 如何在分层类别树中找到我的节点及其祖先的所有兄弟节点?

    这是我的桌子 CREATE TABLE IF NOT EXISTS Category Name varchar 25 NOT NULL lft INT UNSIGNED NOT NULL rgt INT UNSIGNED NOT NULL
  • 尝试使用 sql 获取单行结果? [复制]

    这个问题在这里已经有答案了 我正在尝试显示所有员工 ID 我需要这样的结果 emp id 10 11 12 13 14 15 当尝试时 SELECT LISTAGG emp id WITHIN GROUP ORDER BY emp id A
  • 将 5 gig 文件导入表时出错

    我正在尝试批量插入表 use SalesDWH go BULK INSERT dbo npi FROM S tmp npi csv WITH FIELDTERMINATOR ROWTERMINATOR n lastrow 200 first
  • Psycopg / Postgres:连接随机挂出

    我正在使用 psycopg2 作为我当前正在开发的cherrypy 应用程序 并使用 cli 和 phpgadmin 来手动处理一些操作 这是Python代码 One connection per thread cherrypy threa
  • MySql 复合索引

    我们使用 MySql 作为我们的数据库 以下查询在 mysql 表 大约 2500 万条记录 上运行 我在这里粘贴了两个查询 查询运行得太慢 我想知道更好的复合索引是否可以改善这种情况 你知道最好的综合指数是什么吗 并建议我这些查询是否需要
  • 如何在没有聚合函数的情况下在sql server中创建枢轴查询

    我正在使用 MS SQL SERVER 2008 并且有以下数据 select from account PERIOD ACCOUNT VALUE 2000 Asset 205 2000 Equity 365 2000 Profit 524
  • PDO 连接字符串:最好的方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想使用 php pdo 制作一个后端应用程序 我发现了很多不同的方法来处理 PDO 连接字符串 我想知道使用 pdo 执行连接字符串的最佳方法
  • 了解 FTS3/FTS4:什么是虚拟表并从中搜索具有可搜索的非虚拟表?

    阅读 SQLite3 的 FTS3 FTS4 文档的第一部分后 我现在感到非常困惑 我感到困惑的原因是散布在网络上的示例 我相信它没有涵盖所有可能的用例 另一个原因是我目前所处的情况 话虽如此 我有一个名为 Note 的表 其中包含两个类型

随机推荐

  • 是否有类似于 C sscanf 的 VB6 函数?

    我正在尝试读取由以下形式的文本行组成的文件 first value 1352 2 second value 12 third value 32323 first value 1233 2 second value 22 third valu
  • 关闭 Numba 中的列表反射

    我正在尝试使用 Numba 加速我的代码 我传递给函数的参数之一是可变列表列表 当我尝试更改子列表之一时 出现此错误 在 nopython 模式管道中失败 步骤 nopython 模式后端 无法反映反射容器的元素 反射列表 反射列表 int
  • 在 TFS API 中,如何获取给定测试的完整类名?

    我有一个ITestCaseResult http msdn microsoft com en us library microsoft teamfoundation testmanagement client itestcaseresult
  • postgresql 多个子查询

    我手头有一项任务 要求我返回一个学生的详细信息 该学生参加了一位姓霍夫曼的老师所教的课程 但我陷入了困境 SELECT FROM Public Class WHERE tid SELECT tid FROM Public Tutor WHE
  • 在 MVC Web 应用程序中访问 profile.newproperty

    我最近问了这个问题如何保留匿名用户选择 例如 主题选择 https stackoverflow com questions 11706349 how to persist anon user selection ex theme selec
  • 将解析信息添加到 Robolectric 包管理器

    这个问题与我想做的非常相似 如何使用 Robolectric 隐藏 PackageManager https stackoverflow com questions 12902777 how can i shadow the package
  • $.when 不等待 Ajax 请求完成

    我想首先使用 Backbone js 渲染一个视图 该视图显示从服务器拉取的文章 然后 我想将其标记为 已见 并将未见消息的计数返回给路由器 因为它需要可供其他视图使用 所以在我的路由器中 我有 getArticle function id
  • 使用javascript在IE中设置cookie

    document cookie cookiename cookievalue 过期 星期一 12Jun2015 00 00 00 路径 我在 Internet Explorer 10 上运行此脚本 但它不在 2 个 IE 选项卡之间共享 c
  • Unity 2D Trail 渲染器碰撞

    我制作 2D unity 游戏 但我面临着我的游戏所依赖的一个主要问题 我将一个轨迹渲染器组件附加到我的播放器上 我需要的是使渲染器成为一个碰撞器 充当网格碰撞器我只是不知道是否可以使碰撞器呈现 2D 轨迹渲染器的形状 我在谷歌上搜索过 但
  • 将 StackExchange.Redis 客户端与 Redis 集群结合使用

    如何告诉 StackExchange Redis v1 0 481 它即将连接到 Redis 集群 v3 2 6 如果重要的话 而不仅仅是独立 复制实例 例如 当我使用 redis cli 时 我必须传递 c 标志以使其具有集群感知能力 S
  • 尝试修复 tkinter GUI 冻结问题(使用线程)

    我有一个 Python 3 x 报告创建器 它的 I O 限制非常大 由于 SQL 而不是 Python 以至于主窗口将 锁定 minutes在创建报告时 所需要的只是能够在 GUI 锁定时使用标准窗口操作 移动 调整大小 最小化 关闭等
  • 使用 nbconvert 作为库运行预处理器

    我想使用预处理器运行 nbconvert 该预处理器会删除标有 skip 标签的单元格 我可以从命令行执行此操作 但是当我尝试在笔记本中使用 nbconvert API 时 我遇到了问题 一个例子 按照中的示例文档 https nbconv
  • 彩色打印页眉和页脚?

    我正在尝试在打印 JTable 时创建彩色页眉和页脚 具体来说 我正在查看 javax swing JTable 中的 getPrintable 但 MessageFormat 没有提供指定页眉或页脚颜色的选项 我该怎么做 澄清我有兴趣在打
  • c++11 union 包含带有虚函数的数据成员

    include
  • 回复然后继续使用 AWS Lambda/API Gateway? [复制]

    这个问题在这里已经有答案了 我目前有一个 Web 挂钩 正在调用 AWS API Gateway gt AWS Lambda 函数代理 我想让 Web 挂钩响应更快 并在继续在 Lambda 中处理的同时返回早期回复 我继续执行 Lambd
  • 在Java中解压缩GZip字符串

    我可以找到很多可以解压缩 GZip 文件的函数 但是如何解压缩 GZip 字符串呢 我正在尝试解析 HTTP 响应 其中响应正文是用 GZip 压缩的 但是 整个响应只是存储在字符串中 因此字符串的一部分包含二进制字符 我正在尝试使用 by
  • boost lib 构建配置变化

    我是 boost 新手 你能告诉我黑白有什么区别吗 boost 库的以下变体以及在哪种情况下我需要链接到哪一个 libboost unit test framework vc80 1 35 lib libboost unit test fr
  • 如何制作一个非常大的 Facebook 分享按钮?

    我想制作一个动态的 facebook 分享按钮 我当然可以在 facebook 页面上制作 但是 我想制作一个非常大的按钮 就像在这个网站上一样 http fullm com 这些 photos of an el salvador pris
  • 输入“有吗?”没有下标成员(使用 Firebase)

    每次我运行这行代码时它都不起作用 任何人都可以帮助我改变它吗 谢谢你的帮助 以下是我不断收到的错误 输入任意 没有下标成员 var ref FIRDatabaseReference var refHandle UInt var postDa
  • Postgres全文搜索:如何在多个字段中搜索多个单词?

    我第一次使用 Postgresql 我正在尝试在我的网站中创建一个搜索引擎 我有这张表 CREATE TABLE shop id SERIAL PRIMARY KEY name TEXT NOT NULL description TEXT