我用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"
首先分割文本并排除特殊字符
所以要有这些字alive
和dumas
和franshesco
然后检查所有这些词是否存在于原文中。
我使用这个代码:
select string_to_array(regexp_replace('alive dumas ! franshesco', '[^\w]+',' ','g'), ' ') as val_arr
为了将字符串拆分为单词并删除特殊字符
结果是"{alive,dumas,franshesco}"
现在我想找到一种方法来检查这个字符串中是否存在所有这些单词"dumas, franshesco robert Ferrer Lombardy alive"
有人能帮我找到正确的查询吗
1条答案
按热度按时间mwg9r5ms1#
您需要表中文本仅包含参数字符串中的单词的所有行。您已经有了将字符串转换为单词数组的逻辑,因此我们可以在此基础上进行构建; array containment operator
<@
在这里很方便。假设短语存储在
mytable
中的txt
列下: