1

我正在编写一些脚本,我想创建搜索。我的项目基于 CodeIgniter,我希望所有代码内容都与它兼容。

所以,我已经在研究用于搜索的查询,但这并不好,因为它不支持多于一个的单词。因此,如果我在搜索表单中输入单词“test”(假设测试单词在数据库中的某个字段中),结果将很少,但是如果我输入单词“test test test”(再次假设测试单词是在其中一个字段的数据库中)将没有任何结果。

我目前的查询:

$this->db->select('title, content, date, hyperlink')->or_like(array('title' => $query, 'content' => $query))->order_by('id_article', 'desc')->get('news');

下一个问题是 URI,因为如果我搜索“某篇文章,今天是晴天”,则逗号有问题,在其他情况下也可能有其他不允许的字符。我在那里读过其他几个问题,但我发现的只是$this->uri->uri_to_assoc(),我认为这在我的情况下是行不通的,因为我在我的项目中不使用英语。

这两个问题的最佳解决方案是什么?

4

1 回答 1

1

要解决搜索问题,您可能应该将查询分解成碎片。

$query = 'test test 2 test3';
$parts = explode(' ', $query);

然后循环遍历各个部分并添加 or_like 条件。

foreach ($parts as $q)
{
    $this->db->or_like(array('title' => $q, 'content' => $q));
}

现在它检查任何单词。

您可能还希望允许将引用的值视为一个单词,以便“test 2”将搜索序列 test 2 而不仅仅是 test 和 2。您需要调整获取部分的方式,可能通过正则表达式如:

preg_match_all('/"(?:\\\\.|[^\\\\"])*"|\S+/', $query, $parts);

对于 URI 中的无效字符,一端通过 urlencode 传递字符串,另一端通过 urldecode 传递字符串。

$uri = urlencode('some article, today is sunny');
于 2012-05-01T18:09:22.403 回答