CodeIgniter - 搜索结果 - 如何创建好的查询和URI?

时间:2012-05-01 17:03:41

标签: php codeigniter search

我正在编写一些脚本,我想创建搜索。我的项目基于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(),我认为在我的案例中这是不行的,因为我的项目中没有使用英语。

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

1 个答案:

答案 0 :(得分: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”将搜索序列测试2而不仅仅是测试和2.您需要调整获取部件的方式,可能是正则表达式如:

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

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

$uri = urlencode('some article, today is sunny');