1

我正在使用 tsvectors 在我拥有的关键字列表中搜索类似的条目。通过这种方式,我可以认为以下关键字是相同的:

  • IT安全治理
  • IT安全政府

问题是,由于停用词逻辑,以下条目也被认为是相似的:

  • IT环境
  • 环境

所以,我想有一种方法来检测哪些记录包含停用词,这样我就可以区别对待它们。我可以在记录中添加一个布尔值,以了解它是否包含停用词。

任何想法 ?

4

2 回答 2

1

您可以使用ts_debug查找全文搜索生成的词位:

SELECT array_agg(lexemes[1]) FILTER (WHERE lexemes[1] IS NOT NULL)
FROM ts_debug('english', 'IT security governance')
WHERE alias IN ('asciiword', 'word');

   array_agg    
----------------
 {secur,govern}
(1 row)

要查找是否存在停止,您可以查看词位是否为 NULL:

SELECT token
FROM ts_debug('english', 'IT security governance')
WHERE alias IN ('asciiword', 'word')
  AND lexemes[1] IS NULL;

 token 
-------
 IT
(1 row)
于 2018-08-01T08:11:47.843 回答
0

根据@Laurenz-Albe 的建议,我想出了这个更通用的解决方案;根据此查询返回的值,我可以将带有 stowords 的条目与没有的条目区分开来:

select count(*) FROM ts_debug('english', 'IT security governance')
where array_length(lexemes,1) = 0

select count(*) FROM ts_debug('english', 'advanced security governance')
where array_length(lexemes,1) = 0
于 2018-08-01T09:21:23.400 回答