postgresql postgres在子字中分割字符串并检查是否存在于其他字符串中

kulphzqa  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(198)

我用postgresql11
我想做一个高级搜索。
我的目标是检查我的文本中的所有单词是否存在于原文中
这是原文

"dumas, franshesco robert Ferrer Lombardy alive"

这是搜索的可能性:
"franshesco robert alive"返回确定
"franshesco robert Ferrer Viran"not okbecauseVirannot exist in the original text
"dumas franshesco , robert"ok
"alive dumas ! franshesco"ok
"alive dumas ! suzan franshesco " not ok becausesuzannot exist in the original text
所以这意味着当进行搜索时,首先使用空格分割文本并排除特殊字符,如(,!?.)
然后检查所有这些单词是否存在或不存在于原始文本"dumas, franshesco robert Ferrer Lombardy alive"
例如搜索这个"alive dumas ! franshesco"
原文"dumas, franshesco robert Ferrer Lombardy alive"
首先分割文本并排除特殊字符
所以要有这些字alivedumasfranshesco
然后检查所有这些词是否存在于原文中。
我使用这个代码:

select  string_to_array(regexp_replace('alive dumas ! franshesco',  '[^\w]+',' ','g'), ' ') as val_arr

为了将字符串拆分为单词并删除特殊字符
结果是"{alive,dumas,franshesco}"
现在我想找到一种方法来检查这个字符串中是否存在所有这些单词
"dumas, franshesco robert Ferrer Lombardy alive"
有人能帮我找到正确的查询吗

mwg9r5ms

mwg9r5ms1#

您需要表中文本仅包含参数字符串中的单词的所有行。您已经有了将字符串转换为单词数组的逻辑,因此我们可以在此基础上进行构建; array containment operator <@在这里很方便。
假设短语存储在mytable中的txt列下:

select *
from mytable 
where  string_to_array(regexp_replace(txt,  '[^\w]+',' ','g'), ' ') ) 
    <@ string_to_array(regexp_replace('alive dumas ! franshesco',  '[^\w]+',' ','g'), ' ')

相关问题