【问题标题】:postgresql-8.4 text search is not workingpostgresql-8.4 文本搜索不起作用
【发布时间】:2013-03-27 11:35:07
【问题描述】:

我尝试使用 postgresql-8.4 & django 实现全文/部分文本搜索

SELECT * FROM fts WHERE body_tsvector @@ plainto_tsquery('english','hello welcome')

可用记录是

'hello world'
'hello old world'
'hi welcome'

但是这个查询的结果并不像预期的那样,显示零记录,如何使用plainto_tsquery进行部分/全文搜索?提前致谢。

【问题讨论】:

  • 在 9.2 上执行了相同的命令序列并得到了这个结果:SELECT * FROM fts WHERE body_tsvector @@ plainto_tsquery('english','hellow world') => 0 条记录返回。 SELECT * FROM fts WHERE body_tsvector @@ plainto_tsquery('english','hello world') => 返回 3 条记录。注意第一个查询中的w 字符,我猜这只是拼写错误,但如果没有这个拼写错误,它就可以正常工作。
  • 现在我更正了这个问题。
  • 更正后的查询为更正后的数据集返回 0 个结果,这是正确的行为,但您期望什么?
  • 我的意思是部分文本搜索,即返回所有三个记录。这些每个记录至少包含一个子键,即第一个 2 'hello' 单词中的第一个和第 3 条记录中的 'welcome' 单词。
  • @Dfr,就像这个查询的输出 SELECT * FROM fts WHERE body_tsvector @@ to_tsquery('hellow | welcome') ,plainto_tsquery 可以吗?

标签: sql django postgresql full-text-search


【解决方案1】:

您似乎希望 plainto_tsquery 执行 | (OR) 查询。但是the docs 状态:

plainto_tsquery 将无格式文本 querytext 转换为 tsquery。与 to_tsvector 一样对文本进行解析和规范化,然后在剩余单词之间插入 & (AND) 布尔运算符。

因此,您必须自己解析文本,然后使用 | 运算符创建一个 ts_query。

SELECT * FROM fts 
WHERE body_tsvector @@ to_tsquery('english','hello | welcome');

【讨论】:

    猜你喜欢
    • 2013-03-31
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多