cod*_*ann 11 postgresql embedded full-text-search python
我是 PostgreSQL 世界的新手,所以我提前道歉,因为不知道这些问题是否有明显的答案。
基本上我在寻找两件事。首先是一个简单的基于“包含”的搜索,其中 python 等效项类似于:
def find_all_containing( input_array=[], target ):
output=[]
for i in input_array:
if target in i:
output.append(i)
return(output)
Run Code Online (Sandbox Code Playgroud)
在我目前正在构建的数据库中,从逻辑上讲,如果我试图显示描述中包含“evil”的所有片段标题,我倾向于相信 SQL 命令看起来有点像这样。
SELECT title FROM snippets WHERE 'evil' in description;
/* or */
SELECT title FROM snippets WHERE description CONTAINS 'evil';
Run Code Online (Sandbox Code Playgroud)
我编写了一个内联 python 函数,它返回一个 'TRUE' 或 'FALSE' 来完成以下工作。
/* contains function here */
CREATE FUNCTION contains (input_text text, target text) RETURNS text AS $$
if target in input_text:
return("TRUE")
return("FALSE")
$$ LANGUAGE plpythonu;
/* working command of the script */
SELECT title FROM snippets WHERE contains(description,'Evil')='TRUE';
Run Code Online (Sandbox Code Playgroud)
这有效并且应该阻止我问,但我真的更喜欢学习 SQL 世界将如何解决这个问题,因为学习 SQL 的重点是学习如何使用数据库,而不是仅仅找到另一种方法来塑造 python 以重新创建一个nosql的感觉。
第二件事是,这不是我第一次将一些 Python 片段放在一起,为数据库带来更多的 Python 思维。对于那些深入了解 SQL 世界的人来说,我这样做是不是错过了什么?我得到它的速度,但如果速度是一个问题,我会假设我只需要用 C 重写实现。
保持它尽可能简单到目前为止已经很好地工作了,这就像现在一样。但是,当我发现自己在几乎所有解决方案的代码中都嵌入了另一种语言时,我就会开始问自己是否缺少更大的图景。
Cra*_*ger 13
有两种典型的表达方式。
使用中LIKE缀搜索:
SELECT title FROM snippets WHERE description LIKE '%evil%';
Run Code Online (Sandbox Code Playgroud)
或与position:
SELECT title FROM snippets WHERE position('evil' in description) > 0;
Run Code Online (Sandbox Code Playgroud)
请注意,默认情况下两者都不可索引。搜索“中缀搜索索引”以获取更多信息,并查看pg_trgm您是否需要它。
| 归档时间: |
|
| 查看次数: |
33115 次 |
| 最近记录: |