建议像 google 一样使用 postgresql trigrams 和全文搜索

2024-02-06

我想做一个文本搜索.

我在用着PostgreSQL http://www.postgresql.org/因为神奇的Postgis http://postgis.refractions.net/.

我正在考虑使用FTS http://www.postgresql.org/docs/9.1/interactive/textsearch.html,但是我看到它无法搜索部分词 https://stackoverflow.com/questions/2908712/when-will-postgress-full-text-search-supports-phrase-match-and-proximity-match,所以我发现这个问题 https://stackoverflow.com/questions/2513501/postgresql-full-text-search-how-to-search-partial-words,并看到如何trigrams http://www.postgresql.org/docs/9.1/static/pgtrgm.html works.

主要问题是我正在开发的搜索引擎是针对西班牙语的。 FTS 非常适合词干提取和字典 http://www.postgresql.org/docs/9.1/interactive/textsearch-dictionaries.html(同义词、拼写错误)、UTF 等。 三元组对于部分单词非常有用,但它们只适用于 ASCII,并且(显然)它们不使用字典之类的东西。

我在想是否有什么办法可以利用两者最好的东西。

是否可以使全文搜索和 Trigrams 在 POSTGRESQL 中协同工作?


您可以在 Postgres 中执行此操作,而不需要 Lucene。

您可以引用以下短语tsquery or tsvector像下面这样。您可以添加一个:*之后tsquery进行前缀搜索的术语:

select
'''new york city'''::tsvector   @@ '''new yo'':*'::tsquery, --true
'''new york times'''::tsvector  @@ '''new yo'':*'::tsquery, --true
'''new york'''::tsvector        @@ '''new yo'':*'::tsquery, --true
'''new'''::tsvector             @@ '''new yo'':*'::tsquery, --false
'new'::tsvector                 @@ '''new yo'':*'::tsquery, --false
'new york'::tsvector            @@ '''new yo'':*'::tsquery  --false

主要问题是to_tsvector() and [plain]to_tsquery()将删除您的报价。您可以编写自己的不执行此操作的版本(这并不难),或者在它们之后进行一些后处理以构建您的术语 n 元语法。

上面额外的单引号只是转义符。select $$ i heart 'new york city' $$::tsvector;是等价的。

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

建议像 google 一样使用 postgresql trigrams 和全文搜索 的相关文章

  • PostgreSQL 列“foo”不存在

    我有一个表 其中有 20 个整数列和 1 个名为 foo 的文本列 如果我运行查询 SELECT from table name where foo is NULL 我收到错误 ERROR column foo does not exist
  • Postgresql JDBC 驱动程序中的批量更新在自动提交中回滚

    我正在使用 postgres 9 3 1100 jdbc41 JDBC4 驱动程序进行批量插入 根据 JDBC 规范 其可达 到应用程序以禁用自动提交并提交或 回滚事务 就我而言 我没有使用任何事务 即自动提交为真 但如果批次中的其中一个插
  • PL/pgSQL 中的 EXPLAIN ANALYZE 给出错误:“查询没有结果数据的目的地”

    我试图理解 PL pgSQL 函数中 select 语句的查询计划 但我不断收到错误 我的问题 如何获取查询计划 以下是重现该问题的简单案例 相关表名为 test table CREATE TABLE test table name cha
  • EF6 + Postgres 关系 dbo.AspNetUsers 不存在

    我一直在关注这篇关于使用 PostgreSQL 和 EF6 的文章http www jasoncavet com blog postgresql and entity framework 6 code first http www jaso
  • 使用 postgresql DB 存储 NULL 值需要多少磁盘空间?

    假设我的表上有一列定义了以下内容 MyColumn smallint NULL 存储 0 1 或其他值等值应该需要 2 个字节 1 但是如果我将 MyColumn 设置为NULL 需要多少空间 需要0字节吗 出于管理目的或每列 行是否有一些
  • 如何在PostgreSQL事务中使用变量

    如何在 Postgresql 事务内部将值获取到变量中 如果 SELECT 没有返回任何内容 则抛出错误 如果 SELECT 返回数据 则在事务中使用它们 像这样 BEGIN activeRounds SELECT FROM rounds
  • 使用 \COPY 将带有 JSON 字段的 CSV 加载到 Postgres 中

    我正在尝试使用 COPY 命令将 TSV 数据从文件加载到 Postgres 表中 这是一个示例数据行 2017 11 22 23 00 00 id 123 class 101 level 3 这是我正在使用的 psql 命令 COPY b
  • PostgreSQL 9.3 触发器函数插入带有参数化名称的表

    我正在尝试在 Postgres 中动态分区日志条目 我有 53 个子表 1 个代表每周的日志条目 并且希望使用触发器将 INSERT 路由到子表 我运行该函数INSERT INTO log5 VALUES NEW 并且它有效 我用以下命令运
  • 是否可以使用纬度和经度的舍入值向 Postgres 表添加约束?

    我有一个存储纬度和经度数据的表 像下面这样 CREATE TABLE geo sample id uuid DEFAULT uuid generate v4 latitude FLOAT NOT NULL longitude FLOAT N
  • 在 Postgresql 中使用标识符重新排序列

    以下代码可以工作并创建一个带有序列号的临时表 该表会为每个新名称重新启动 with results as select row number over partition by name order BY name as mytid nam
  • Postgres 在并发更新插入时出现死锁

    我们有一个从数据流中读取信息并将该信息更新到数据库中的应用程序 数据是 Google Drive 上发生的变化 这意味着影响相同对象的许多事件可能会非常接近地发生 将此信息更新插入数据库时 我们遇到了死锁 日志中显示的内容如下 我已经重建并
  • 使用 Hibernate 映射数组

    你能帮我使用 Hibernate 映射这个类吗 public class MyClass private Long id private String name private int values 我使用的是 PostgreSQL 表中的
  • PostgreSQL 对 string\varchar 的各种清理

    我必须通过以下方式清理一些 varchar 删除特殊字符 例如 来自封闭列表 我已经成功地通过大量使用replace regexp replace来做到这一点 但我正在寻找类似于SQL Server中的东西 删除以下数字但不删除相邻的数字含
  • 在 Postgres 中以周为单位分割间隔

    这是另一个关于日期的 SQL 问题 我正在使用 PHP 和 Postgres 构建一个日历应用程序 它将显示几天 几周甚至几个月的事件 每个事件都有开始日期和结束日期 按范围选择它们不是问题 然而 如果 Postgres 可以在每周的第一天
  • 打印 sqlalchemy 行

    我想做的就是打印 sqlalchemy 表行的一行 假设我有 from sqlalchemy import Column Integer String from sqlalchemy ext declarative import decla
  • 按名称删除 jsonb 数组项

    我有下表 CREATE TABLE country id INTEGER NOT NULL PRIMARY KEY name VARCHAR 50 extra info JSONB INSERT INTO country id extra
  • php postgresql pdo 从标准输入复制

    COPY table name field1 field2 field3 FROM STDIN CSV 1 2 q w 3 4 a s 5 6 d 如何通过 PDO 执行此查询 Update 问题是 PDO 驱动程序将此查询作为语句执行 例
  • 如何配置 pgAdmin III 在启动时打开默认数据库并选择表节点?

    当我启动 pgAdmin III 时 99 的情况下我都需要查看某个特定数据库的表 每次都要点击树 很烦人 当我打开 pgAdmin 时 我希望它自动连接到我的最后一个数据库并展开左侧的树并选择 表 节点 那可能吗 同样令人烦恼的是 当我重
  • Azure PostgreSQL 服务器服务排序规则创建错误

    我正在尝试将当前现有数据库导入到 Azure PostgreSQL 服务器上运行的 postgre 实例 我已经将我的azure postgresql服务器参数配置为使用UTF8编码 我不确定它是否在不重新启动的情况下应用 但即使我没有重新
  • 更改 IdentityServer4 实体框架表名称

    我正在尝试更改由 IdentityServer4 的 PersistedGrantDb 和 ConfigurationDb 创建的默认表名称 并让实体框架生成正确的 SQL 例如 而不是使用实体IdentityServer4 EntityF

随机推荐

  • 使用 Flask 和 LangChain 流式传输 ChatGPT 的结果

    基本上我想用 Flask 和 LangChain 来实现这一点 https www youtube com watch v x8uwwLNxqis https www youtube com watch v x8uwwLNxqis 我正在构
  • Hashtable 与 HashMap 中的哈希函数?

    我知道Hashtable和HashMap之间的区别 然而 这两个类似乎都在使用哈希函数完成工作 Hashtable中使用的哈希函数和HashMap中使用的哈希函数有区别吗 特别是 他们使用的哈希算法有区别吗 这两个类中用于散列的公式是什么
  • Rails 3 命名空间和自定义类的问题(未初始化常量)

    我的 Rails 3 2 11 项目中有一个名为app queries visible discussions rb如下所示 class VisibleDiscussions end 我想为查询命名空间 以便我可以使用类似的方法来调用它Qu
  • 当我在存储库中丢失一些修订时,如何转储所有 svn 数据?

    我想转储旧的 svn 源并将其加载到我的新计算机上 我的旧 svn 存储库大约有 100GB 大 当我使用svnadmin dump xx Repositoryfile gt mydump为了转储 svn 文件 我得到了一个 512Mb 大
  • 如何使用Rcpp来加速for循环?

    我创建了一个 for 循环 我想使用 Rcpp 库来加速它 我对C 不太熟悉 你能帮我让我的功能更快吗 感谢您的帮助 我已经包含了我的算法 代码 输入和输出以及 sessionInfo Here is 我的算法 如果当前价格高于先前价格 则
  • Android Studio:恢复“清除只读状态”对话框

    如果源文件是只读的 Android Studio 将显示一个对话框 询问我是否要清除文件的只读状态 以便可以进行编辑 我曾经错误地选中了 不再显示此对话框 的框 然后单击 确定 从那时起 Android Studio 只是清除文件的只读状态
  • WPF DataGrid 过滤 - CollectionViewSource 刷新

    我想知道如何在单击按钮时刷新 CollectionViewSource 到目前为止我已经
  • ExtJS中有map()函数吗?

    ExtJS有Ext each 函数 但是map 是否也隐藏在某处 我已经很努力了 但还没有找到任何可以填补这个角色的东西 这似乎是一些简单而琐碎的事情 像 Ext 这样大的 JS 库显然必须具备 或者当 Ext 确实不包含它时 将其添加到
  • 是否可以在 django 中指定外部 URL 名称

    我刚刚开始在 Django 中命名我的 URL 模式 因此如果我想更改 URL 模式 我只需在一处更改它即可 例如 url r HomeListView as view name home 并在我的模板中引用它 如下所示 url home
  • 如何跳出父函数?

    如果我想打破一个函数 我可以调用return 如果我在子函数中并且想跳出调用子函数的父函数怎么办 有没有办法做到这一点 一个最小的例子 def parent print Parent does some work print Parent
  • Python午夜时间对比

    我必须节省时间AM PM format 但我在决定如何输入午夜时间时遇到困难 假设时间是晚上 9 点到第二天早上 6 点 我必须把它分成日常的基础 像这样 t1 datetime datetime strptime 09 00PM I M
  • 检查两个集合中是否存在任何元素

    我想知道 Linq 是否有一种方法来检查两个集合是否至少有一个共同元素 我期待这样的事情 var listA new List
  • 将包含“id,attribute,value”列的表转换为“id,attribute1,attribute2,...”

    我在数据库中有一个表 如下所示 CustomerId Attribute Value 30 Name John 30 Surname Smith 30 Phone 555123456 为了充分利用这些数据 我需要让它看起来像某样东西 像这样
  • Spritebatch.Begin() 变换矩阵

    我一直想知道 spriteBatch 中的变换矩阵是如何实现的 我创建了一个2D相机 变换矩阵如下 if needUpdate transformMatrix Matrix CreateTranslation Position X Posi
  • 能否强制 AVFoundation 播放本地 .ts 文件?

    显然 AVFoundation 和 Quicktime X 可以解复用并正确播放编码 ts容器 因为 tsHTTPS 实时流媒体底层的容器 缺乏建立本地网络服务来服务 m3u8以及相关的 ts文件 我真的希望能够 说服AVURLAsset
  • 如何使用 CoreNLP 的 RegexNER 检测具有超过 1 个单词的命名实体?

    我在 CoreNLP 中使用 RegexNER 注释器 我的一些命名实体由多个单词组成 摘自我的映射文件 RAF 抑制剂 DRUG CLASS 吉尔伯特综合症 疾病 第一个被检测到 但每个单词都获得注释 DRUG CLASS 并且似乎没有办
  • 有什么办法可以将表格中的某些列居中吗?

    我广泛使用 css 格式并为表定义类 其中包含 thead tbody tfoot 的子类以及 tr th td 的另一级子类 在某些情况下 我想让表的整列具有特定样式的类 但不知道该怎么做 有没有什么方法 使用 HTML5 CSS3 其他
  • Linq .Contains 包含大集合会导致 TDS 错误

    我有点过于简单化了 因为我正在寻找通用的答案 假设我有一个这样的表设置 Parent recno int unique pk date datetime stuff varchar 50 Child parentrecno int fk P
  • Android Studio 调试错误“连接被拒绝”

    我知道以前有人问过这个问题 但我尝试了所有建议的解决方案 但还没有解决我的问题 我无法使用 Mac Yosemite 调试任何 Android studio 1 5 预览版 2 应用程序 我得到的错误是 Unable to open deb
  • 建议像 google 一样使用 postgresql trigrams 和全文搜索

    我想做一个文本搜索 我在用着PostgreSQL http www postgresql org 因为神奇的Postgis http postgis refractions net 我正在考虑使用FTS http www postgresq