Я создал индекс полнотекстового поиска с разными весами, и он хорошо работает для базового поиска «ИЛИ», когда вы выполняете базовый запрос, как показано ниже:
db.items.find( { $text: { $search: "iphone 5" }}, {score: {$meta: "textScore"}}).pretty()
Этот запрос (на стороне клиента оболочки) найдет все элементы, содержащие слова «iphone» ИЛИ ЖЕ «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') ) );
Моя проблема касается оператора «И» в полнотекстовом поиске в PHP. В оболочке клиентской стороны, чтобы получить все элементы, содержащие слова «iphone» А ТАКЖЕ «5» я делаю как ниже:
db.items.find( { $text: { $search: "\"iphone\" \"5\"" }}, {score: {$meta: "textScore"}}).pretty()
Это работает отлично, но в PHP я пробовал много способов получить те же результаты, но это не работает вообще, что я пробовал:
$product = '\"iphone\" \"5\"';
$product = '\\"iphone\\" \\"5\\"';
$product = "\'iphone\' \'5\'";
...
Как это сделать в PHP, чтобы я мог получить тот же результат, что и shell?
Итак, после еды я вспомнил, что простая кавычка не действует так же, как двойная кавычка для специальных символов, таких как «\», поэтому я просто перешел на этот рабочий код:
$product = "\"iphone\" \"5\"";
Это работает как очарование, надеюсь, что это поможет кому-нибудь когда-нибудь;)
Других решений пока нет …