在字符串中搜索任何单词或部分单词

Searching for any word or part of it inside string

我一直在尝试实现搜索查询,其中一部分是搜索字符串。我想要完成的是从 "lorem ipsum dolor es" 的示例字符串中搜索任何单词查找具有 lorem OR lorem ipsum OR dolor 的记录OR *lorem ipsum dolor es* 如果适用。

到目前为止我尝试了什么:

SIMILAR TO '%lorem ipsum dolor es%' - this obviously returns 0 since not a whole string is found

LIKE LOWER '%lorem ipsum dolor es%' - same as above

to_tsvector(files.desc) @@ 'lorem ipsum dolor es' - also empty result

我是否必须将用户输入转换为单词数组才能完成我的任务?

编辑:

我最初的想法是能够在我的 table 中找到字符串的任何部分,这是通过使用以下查询解决的。然而,我遇到了另一个障碍。如果我想通过一个查询和严格搜索来搜索两个 table 怎么办?如果用户键入 "lorem ipsum keyword4",我希望它找到任何图像,该图像的描述包含任何 lorem ipsum 的单词并且具有属于它的关键字 4。但我也希望它在输入 "keyword4" 或输入 "lorem ipsum" 时找到图像。下面 fiddle 显示了它在类型 "lorem ipsum keyword4" 的情况下如何工作。我该怎么做?

fiddle here

我使用了一个搜索功能。其中 p_name 是文本输入 'lorem ipsum dolor es'。它查找名称包含所有单词作为子字符串的患者记录。

SELECT * FROM patient    
WHERE patient.name LIKE ALL (SELECT DISTINCT '%' || name || '%' FROM UNNEST(STRING_TO_ARRAY(p_name,' ')) AS name)

查找包含 任何 单词 的所有字符串的最快和最简单的方法 - 被视为英语中的自然语言单词(默认字典)在 Postgres text search:

SELECT * FROM tbl
WHERE  to_tsvector(string)
   @@  to_tsquery(replace('lorem ipsum dolor es'::text, ' ', '|'));

SQL Fiddle.

文本搜索不区分大小写。
这可以通过索引非常有效地得到支持。