我正在尝试在我的集合中搜索body
属性包含所有搜索关键字的所有事件。
示例字符串 -"The black cat is definitely purple."
关键字"black", "purple"
将返回字符串。
关键字"black", "dog"
不会返回该字符串。
我一直在浏览一些主题和谷歌搜索,但似乎找不到合适的语法来做到这一点。
目前,我正在使用逗号分隔的关键字字符串,将其分解为数组,然后将其放入MongoRegex Object
. 我知道我的语法是关闭的,因为当我只发送一个关键字时它可以工作,但是当有多个关键字时,我没有得到任何我期望得到的结果。
当前方法:
<?php
function search_topics($array)
{
include_once('config.php');
$collection = get_connection($array['flag']);
$x = 0;
$string = null;
$search_results = null;
$keywords = explode(',', $array['search']);
$end_of_list = count($keywords);
while ($x < $end_of_list)
{
$string = $string."/".$keywords[$x];
$x++;
if($x >= $end_of_list)
{
$string = $string."/i";
}
}
if ($string != null)
{
try
{
$regex_obj = new MongoRegex($string);
$cursor = $collection->find(array('body' => $regex_obj));
}
catch (MongoCursorException $e)
{
return array('error' => true, 'msg' => $e->getCode());
}
foreach($cursor as $post)
{
$search_results[] = $post;
}
if ($search_results != null && count($search_results) > 1)
{
usort($search_results, 'sort_trending');
}
return array('error' => false, 'results' => $search_results);
}
else
{
return array('error' => false, 'results' => null);
}
}
?>
因此,如果我将字符串发送到black
,$array['search']
我的对象将由该字符串组成/black/i
并将返回该字符串。
如果我发送字符串black,cat
,$array['search']
我的对象将由 形成/black/cat/i
并返回null
。
任何人都可以用这个正则表达式语法的东西指出我正确的方向吗?
提前感谢您的帮助!
弥敦道