CakePHP搜索插件,问题与orCondition

时间:2013-11-24 21:41:44

标签: sql cakephp cakephp-2.0 conditional-statements cakephp-search-plugin

我遇到了orCondition方法的问题。我希望使用this plugin创建一个简单的搜索引擎,这样我只想找到一个短语(相同或相似),如果它在标题和描述中的数据库中,我真的不知道我做错了什么。只有我能够实现的效果是,当我在表单中输入完全与数据库中最初相同的顺序时,我可以找到一个标题。例如,如果帖子标题为"一两三"然后我输入"两个"它有效,但如果我输入"三个"没有结果。这是一些代码。

型号:

public $actsAs = array('Search.Searchable');

public $filterArgs = array(
'title' => array('type' => 'query', 'method' => 'orConditions'),
'status' => array('type' => 'value'),
'category' => array('type' => 'value'),
'country' => array('type'=>'value'),
'continent' => array('type'=>'value'),
'cycle' => array('type'=>'value'),);

...
        public function orConditions($data = array()) {
        $title = $data['title'];
        $cond = array(
            'OR' => array(
                $this->alias . '.title LIKE' => '%' . $title . '%',
                $this->alias . '.description LIKE' => '%' . $title . '%',
            ));
        return $cond;
        }

查看:

echo $this->Form->create('Ad', array('url' => array_merge(array('action' => 'index'), $this->params['pass'])));

1 个答案:

答案 0 :(得分:1)

我认为你理解了一些错误。搜索插件不被认为是任何类型的搜索引擎。我认为readme.md也表明该插件只是实现了the PRG pattern。它基本上将你的POST转换为GET,并将GET参数转换为CakePHP查找条件。查找条件是它的“搜索”部分。

你所做的并不是一个“搜索引擎”,搜索引擎比你尝试做的更“智能”和复杂。你做的是一个带有一些逻辑运算符的简单SQL查询。您尝试构建的是搜索索引。

您遇到的问题是构建查询的方式有问题,而不是搜索插件或CakePHP。如果您的标题是“一二三”并且您的搜索表达式为%two%,那么它将起作用,因为无论单词二是哪里,它都会匹配标题。但是如果你使用%three two%进行查询,它将无法匹配任何内容,因为它正在查找该字符串。

如果您想要实现这一点,则必须将这两个单词拆分为WHERE TITLE LIKE = %two% OR %three%之类的查询。或者,如果您要匹配必须同时包含%two% AND %three%的标题。

我建议您阅读有关Mysql full text search或如何使用SQL搜索数据的一般信息。为了构建搜索索引,可以使用更好的数据库,如Elastic Search。弹性搜索用于构建搜索索引。您尝试搜索内容的方式在某些时候肯定会效率低下,具体取决于“简单”或“小”对您来说意味着什么。