PHP MongoClient(PECL)和精确单词全文搜索

时间:2015-01-28 10:47:14

标签: php mongodb mongodb-query pecl

我创建了一个具有不同权重的全文搜索索引,它对于" OR"进行如下基本查询时的基本搜索:

db.items.find( { $text: { $search: "iphone 5" }}, {score: {$meta: "textScore"}}).pretty()

此查询(shell客户端)将查找包含单词" iphone"的所有项目。 OR " 5"。在PHP中,我们这样查询:

$product = 'iphone 5';
$search = array( '$text' => array('$search' => $product) );
$m = new MongoClient("mongodb://localhost:xxxxx", array("username" => 'xxxxx', "password" => 'xxxxx', "db" => 'xxxxx'));
$db = $m->mybase;
$collection = $db->items;
$cursor = $collection->find( $search, array('score' => array('$meta' => 'textScore') ) )->sort( array('score' => array('$meta' => 'textScore') ) );

我的问题是关于" AND"运算符在PHP中的全文搜索。在shell客户端,以获取包含单词的所有项目" iphone" AND " 5"我这样做:

db.items.find( { $text: { $search: "\"iphone\" \"5\"" }}, {score: {$meta: "textScore"}}).pretty()

它工作得很好但是在PHP中我尝试了很多方法来获得相同的结果,但它根本不起作用,我尝试过:

$product = '\"iphone\" \"5\"';
$product = '\\"iphone\\" \\"5\\"';
$product = "\'iphone\' \'5\'";
...

如何在PHP中执行此操作,以便我可以获得与shell相同的结果?

1 个答案:

答案 0 :(得分:0)

好的,所以饭后我记得简单的引用与特殊字符的双引号不一样,例如" \"所以我只是改为那个工作代码:

$product = "\"iphone\" \"5\"";

它作为一种魅力,希望有一天能帮助某人;)