Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用PostgreSQL实现更好的搜索?_Php_Postgresql - Fatal编程技术网

Php 如何使用PostgreSQL实现更好的搜索?

Php 如何使用PostgreSQL实现更好的搜索?,php,postgresql,Php,Postgresql,我正在使用ilike%name%在我的PostgreSQL数据库中搜索名称 问题是匹配的名称太多,而且我的显示环境有限,因此我的搜索输出限制为20个。实际上,我可能只是错过了与输入字符串更匹配的名称 我将我的名字(名字、中间名、姓氏)存储在一列中。以下是搜索代码片段: select l_name from leader_info where (l_name ilike $1 or l_name ilike $2 or l_name ilike $3) 我通常将输入的字符串拆分为3。 当我搜索

我正在使用
ilike%name%
在我的PostgreSQL数据库中搜索名称

问题是匹配的名称太多,而且我的显示环境有限,因此我的搜索输出限制为20个。实际上,我可能只是错过了与输入字符串更匹配的名称

我将我的名字(名字、中间名、姓氏)存储在一列中。以下是搜索代码片段:

select l_name from leader_info where (l_name ilike $1 or l_name ilike $2 or l_name ilike $3) 
我通常将输入的字符串拆分为3。 当我搜索名称时,如:

汤姆沃尔夫

我得到的匹配像:

塞缪尔·奥托姆、史蒂夫·沃尔顿、萨姆·托默

我希望只获得以下匹配:

汤姆·汉克斯,威尔弗雷德·汤姆

一种可能是这样

(例如,仅匹配单词“tom”和“steve”)

或者也可以是:
。。。到哪里去_tsvector(col)@@to _tsquery('Tom | steve')


这是postgres,也可以使用索引进行优化。

它可以工作,但我需要搜索不区分大小写,我希望tom和tom匹配相同的结果,谢谢@OtoShavadze@OnyemenamNdubuisi-你测试过了,这和“汤姆”不匹配?我的错,很有魅力谢谢@OtoShavadze,有速度问题吗,或者使用此查询与使用ILIKEYou相比的任何其他陷阱您可以使用索引来加快我们的搜索速度,请按照我答案中的链接查看
创建索引
部分谢谢@OtoShavadze为什么编辑您的答案,另一个很好用
with t(col) as(
    select  'Samuel Ortom' union all
    select  'tom hanks' union all
    select  'Wilfred tom' union all
    select  'steve waltom' union all
    select  'A steven' union all
    select  'sam tommer'  
)

select * from t where 
to_tsvector(col) @@ to_tsquery('tom')
or
to_tsvector(col) @@ to_tsquery('steve');