Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.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
CMS搜索功能与PHP&;PDO_Php_Full Text Search_Pdo - Fatal编程技术网

CMS搜索功能与PHP&;PDO

CMS搜索功能与PHP&;PDO,php,full-text-search,pdo,Php,Full Text Search,Pdo,我想在CMS中实现一个新的搜索功能。Airpapr使用PDO连接到数据库。我应该从头开始编写搜索函数,还是有一些好的开源搜索引擎可以在PHP/PDODB设置中使用?如果建议自己编写搜索函数,是否有一些关于如何使用PHP/PDO编写搜索引擎的好教程?搜索函数本身只需搜索两个不同的表行。搜索不仅仅是一个函数;它比简单的字符串比较+子字符串出现计数更复杂 考虑到匹配的术语突出显示、词干、同义词匹配、停止词的影响以及对内容数据库单独的搜索索引的需要,搜索是一个广泛的问题,最好由现有的搜索系统来解决 一个

我想在CMS中实现一个新的搜索功能。Airpapr使用PDO连接到数据库。我应该从头开始编写搜索函数,还是有一些好的开源搜索引擎可以在PHP/PDODB设置中使用?如果建议自己编写搜索函数,是否有一些关于如何使用PHP/PDO编写搜索引擎的好教程?搜索函数本身只需搜索两个不同的表行。

搜索不仅仅是一个函数;它比简单的字符串比较+子字符串出现计数更复杂

考虑到匹配的术语突出显示、词干、同义词匹配、停止词的影响以及对内容数据库单独的搜索索引的需要,搜索是一个广泛的问题,最好由现有的搜索系统来解决

一个流行的选择是:

它的主要特点包括功能强大 全文搜索,点击突出显示, 分面搜索、动态聚类、, 数据库集成,丰富的文档 (例如Word、PDF)处理,以及 地理空间搜索。索尔是一位非常有才华的人 可扩展,提供分布式搜索 和索引复制,并增强 的搜索和导航功能 世界上许多最大的互联网公司 地点


有很多方法可以帮助您入门,更不用说整个web上都有与Solr相关的资源。

搜索不仅仅是一种功能;它比简单的字符串比较+子字符串出现计数更复杂

考虑到匹配的术语突出显示、词干、同义词匹配、停止词的影响以及对内容数据库单独的搜索索引的需要,搜索是一个广泛的问题,最好由现有的搜索系统来解决

一个流行的选择是:

它的主要特点包括功能强大 全文搜索,点击突出显示, 分面搜索、动态聚类、, 数据库集成,丰富的文档 (例如Word、PDF)处理,以及 地理空间搜索。索尔是一位非常有才华的人 可扩展,提供分布式搜索 和索引复制,并增强 的搜索和导航功能 世界上许多最大的互联网公司 地点


有一个方法可以帮助您入门,更不用说整个web都充满了与Solr相关的资源。

正如您所说的使用PDO连接到数据库,使用非供应商特定的SQL命令是一个好主意,因为PDO的一个主要特性是能够使用不同的DBMS,而无需更改每个SQL命令

要编写一个简单的、非特定于供应商的搜索函数来使用PDO,可以使用SQL
之类的
。示例SQL查询如下所示:

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
确保将用户输入的不同搜索词分开,并对每个要搜索的词进行搜索。此外,如果搜索多个列,请确保筛选重复的条目

PDO需要注意的另一点是,类
操作符所需的
%
应该添加到
$sth->execute()
数据中,而不是普通的SQL字符串中。有关更多信息,请参见此问题

下面是一个使用普通ANSI SQL的简单搜索函数的示例脚本:

$searchterm = trim($searchterm);
    $searchterm = explode(' ', $searchterm);
    $this->sql = "SELECT ID 
        FROM ".$db_prefix."_base
        WHERE article_content_title_".$lang."
        LIKE :string1
        OR
        article_content_text_".$lang."
        LIKE :string2";
    foreach ($searchterm as $value) {
        $this->sth = $dbh_pdo->prepare($this->sql);
        $this->sth->execute(array(':string1' => "%$value%", ':string2' => "%$value%"));
        $this->sth->setFetchMode(PDO::FETCH_ASSOC);
        while ($this->row = $this->sth->fetch()) {      
            $this->id[] = $this->row['ID'];

        }
    }
    $this->id = array_unique($this->id);
    $this->id = array_merge($this->id);
    for ($i = 0; $i < count($this->id); $i++) {
        if ($i == count($this->id) - 1) {
            $this->searchResultID .= "id = ".$this->id[$i];
        }
        else {
            $this->searchResultID .= "id = ".$this->id[$i]." OR ";
        }
    }
$searchterm=trim($searchterm);
$searchterm=爆炸(“”,$searchterm);
$this->sql=“选择ID
来自“$db\u前缀”。\u基
其中文章内容标题为“$lang”
比如:string1
或
文章内容文本“$lang”
例如:string2”;
foreach($searchterm作为$value){
$this->sth=$dbh\u pdo->prepare($this->sql);
$this->sth->execute(数组(':string1'=>“%$value%”,':string2'=>“%$value%”);
$this->sth->setFetchMode(PDO::FETCH_ASSOC);
而($this->row=$this->sth->fetch()){
$this->id[]=$this->row['id'];
}
}
$this->id=array\u unique($this->id);
$this->id=array\u merge($this->id);
对于($i=0;$iid);$i++){
如果($i==count($this->id)-1){
$this->searchResultID.=“id=”.$this->id[$i];
}
否则{
$this->searchResultID.=“id=”..$this->id[$i]”或;
}
}

请注意,这是一个非常基本的搜索功能,不评估搜索结果,尤其是其他内容(例如匹配的术语突出显示、词干分析、同义词匹配等)

正如您所说,您使用PDO连接到数据库,最好使用非供应商特定的SQL命令,因为PDO的主要特性之一是能够使用不同的DBMS,而不必更改每个SQL命令

要编写一个简单的、非特定于供应商的搜索函数来使用PDO,可以使用SQL
之类的
。示例SQL查询如下所示:

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
确保将用户输入的不同搜索词分开,并对每个要搜索的词进行搜索。此外,如果搜索多个列,请确保筛选重复的条目

PDO需要注意的另一点是,类
操作符所需的
%
应该添加到
$sth->execute()
数据中,而不是普通的SQL字符串中。有关更多信息,请参见此问题

下面是一个使用普通ANSI SQL的简单搜索函数的示例脚本:

$searchterm = trim($searchterm);
    $searchterm = explode(' ', $searchterm);
    $this->sql = "SELECT ID 
        FROM ".$db_prefix."_base
        WHERE article_content_title_".$lang."
        LIKE :string1
        OR
        article_content_text_".$lang."
        LIKE :string2";
    foreach ($searchterm as $value) {
        $this->sth = $dbh_pdo->prepare($this->sql);
        $this->sth->execute(array(':string1' => "%$value%", ':string2' => "%$value%"));
        $this->sth->setFetchMode(PDO::FETCH_ASSOC);
        while ($this->row = $this->sth->fetch()) {      
            $this->id[] = $this->row['ID'];

        }
    }
    $this->id = array_unique($this->id);
    $this->id = array_merge($this->id);
    for ($i = 0; $i < count($this->id); $i++) {
        if ($i == count($this->id) - 1) {
            $this->searchResultID .= "id = ".$this->id[$i];
        }
        else {
            $this->searchResultID .= "id = ".$this->id[$i]." OR ";
        }
    }
$searchterm=trim($searchterm);
$searchterm=爆炸(“”,$searchterm);
$this->sql=“选择ID
来自“$db\u前缀”。\u基
其中文章内容标题为“$lang”
比如:string1
或
文章内容文本“$lang”
例如:string2”;
foreach($searchterm作为$value){
$this->sth=$dbh\u pdo->prepare($this->sql);
$this->sth->execute(数组(':string1'=>“%$value%”,':string2'=>“%$value%”);
$this->sth->setFetchMode(PDO::FETCH_ASSOC);
而($this->row=$this->sth->fetch()){
$this->id[]