我需要将全文搜索与 Postgresql 结合使用,但我找不到ts_query针对索引文本字段(ts_vector数据类型)从表(使用 )查找单词列表的方法。只能ts_query处理几个单词还是也可以处理来自表的多个值?
在此先感谢您的帮助。
让我尝试根据对问题的评论来制定答案(如果我正确理解您的请求)。
您正在尝试根据存储在另一个表的名为 的列中的单词对表tableA、列indexed_text_field(一种类型)进行全文搜索。tsvectortexttableBwords
首先,如果您希望在全文搜索期间向 PostgreSQL 提供多个标记(单个单词),您可以使用两个函数:
在第一个函数中,您需要用与号 (&) 分隔每个给定的标记。第二个函数可以输入任何文本字符串,它会为您将其切成标记。更多信息请点击这里。
您面临的挑战是您希望根据另一个表中存在的单词来选择匹配项。这可以通过不同的方式完成,例如通过简单的(内部)联接:
SELECT a.* FROM tableA a, tableB b WHERE a.indexed_text_field @@ to_tsquery(b.words);
Run Code Online (Sandbox Code Playgroud)
或者,如果该列中有多个单词,words您很可能应该使用该plainto_tsquery()函数来使事情变得简单:
SELECT a.* FROM tableA a, tableB b WHERE a.indexed_text_field @@ plainto_tsquery(b.words);
Run Code Online (Sandbox Code Playgroud)
然而,如果您必须使用更低级别的to_tsquery()版本:
SELECT a.* FROM tableA a, tableB b WHERE a.indexed_text_field @@ to_tsquery(replace(b.words, ' ', '&'));
Run Code Online (Sandbox Code Playgroud)
在后者中,您用&符号替换单词之间的所有空格,从而使它们成为单独的标记。不过,请注意最后一个索引的使用,因为您可能需要针对该replace()函数的使用创建一个表达式索引。
| 归档时间: |
|
| 查看次数: |
2692 次 |
| 最近记录: |