在字符串中搜索任何单词或部分单词
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" 的情况下如何工作。我该怎么做?
我使用了一个搜索功能。其中 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, ' ', '|'));
文本搜索不区分大小写。
这可以通过索引非常有效地得到支持。
我一直在尝试实现搜索查询,其中一部分是搜索字符串。我想要完成的是从 "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" 的情况下如何工作。我该怎么做?
我使用了一个搜索功能。其中 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, ' ', '|'));
文本搜索不区分大小写。
这可以通过索引非常有效地得到支持。