Postgresql:如何使全文搜索忽略某些标记?

标签 postgresql full-text-search

是否有魔法函数或运算符可以忽略某些标记?

select to_tsvector('the quick. brown fox') @@ 'brown' -- returns true

select to_tsvector('the quick,brown fox') @@ 'brown' -- returns true

select to_tsvector('the quick.brown fox') @@ 'brown' -- returns false, should return true

select to_tsvector('the quick/brown fox') @@ 'brown' -- returns false, should return true

最佳答案

恐怕你可能被卡住了。如果您通过 ts_debug 运行您的条款,您将看到“quick.brown”被解析为主机名,而“quick/brown”被解析为文件系统路径。遗憾的是,解析器真的不是那么聪明。

我唯一的建议是预处理文本以将这些标记转换为空格。您可以轻松地在 plpgsql 中创建一个函数来执行此操作。

nicg=# select ts_debug('the quick.brown fox');
                              ts_debug
---------------------------------------------------------------------
 (asciiword,"Word, all ASCII",the,{english_stem},english_stem,{})
 (blank,"Space symbols"," ",{},,)
 (host,Host,quick.brown,{simple},simple,{quick.brown})
 (blank,"Space symbols"," ",{},,)
 (asciiword,"Word, all ASCII",fox,{english_stem},english_stem,{fox})
(5 rows)

正如您从上面看到的,您不会获得 quick 和 brown 的代币

关于Postgresql:如何使全文搜索忽略某些标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/896752/

相关文章:

postgresql - GiST 和 GIN 索引的区别

ruby-on-rails - 如何统计记录数并按日期分组(包括有 0 条记录的天数)?

sql - 搜索整个数据库记录的模式,而不是特定字段

lucene - 如何创建更复杂的Lucene查询字符串?

ruby-on-rails - 使用 Rails Solr 搜索子字符串

typescript - 如何使用typeorm将可为空的数据库字段设置为NULL?

postgresql - 将无界范围插入 TSRANGE Postgresql

node.js - sequelize db :migrate and postgres 的问题

asp.net - ASP.NET 使用哪种搜索技术?

sql - 将 SQL CONTAINS 包装为表达式?