PHP 中的文本搜索


text search in php

我正在尝试使用PHP在MongoDB中实现文本搜索。我已经在集合和 Mongo 查询上创建了必要的文本索引,运算符$text,$search工作正常。但是,使用PHP,我在mongodb集合中搜索文档时遇到了一些错误。

这是我的代码:

<html>
<body>
<h3>MongoDB Test</h3>
<h2>Text search - Amazon reviews</h2>
<br>
<form method="post">
search: <input type="text" name="term"><br><br>
<input type="submit">
</form>
</body>
</html>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
   $term = $_REQUEST['term'];
   // connect to mongodb : default is localhost:27017
   $m = new MongoClient();
   echo "Connection to database successfully"."</br>";
   // select a database
   $db = $m->selectDB('test');
   $collection = new MongoCollection($db, 'reviews');
$query = array('$text' => array('$search'=> $term));
$cursor = $collection->find($query);
var_dump($cursor);
echo '<table border="1"><tr><td>Review Title</td><td>Author</td><td>Rating</td></tr>';
foreach ($cursor as $doc) {
  echo '<tr>';
         echo '<td>'.$doc['Reviews.Title'].'</td>'.
           '<td>'.$doc['Reviews.Author'].'</td>'.
           '<td>'.$doc['Reviews.Overall'].'</td>';
  echo '</tr>';

}
echo '</table>';
}
?>

错误: 成功连接到数据库 object(MongoCursor)#4 (0) { } 注意:未定义的索引:Reviews.Title in C:''xampp''htdocs''MongoSearch''index.php 第 41 行

注意:未定义的索引:Reviews.Author in C:''xampp''htdocs''MongoSearch''index.php 在第 42 行

注意:未定义的索引:评论.整体在 C:''xampp''htdocs''MongoSearch''index.php 第 43 行

注意:未定义的索引:Reviews.Title in C:''xampp''htdocs''MongoSearch''index.php 第 41 行

注意:未定义的索引:Reviews.Author in C:''xampp''htdocs''MongoSearch''index.php 在第 42 行

注意:未定义的索引:评论.整体在 C:''xampp''htdocs''MongoSearch''index.php 第 43 行


任何人都可以指出此代码中的错误吗?文本索引是在此集合上正确构建的。下面的 mongo 查询在集合上工作正常。

db.getCollection('reviews').find({$text: {$search : 'terrible'}})

这是生成文档的结构:

    {
    "_id" : ObjectId("571a3c99fef93833794475d4"),
    "Reviews" : {
        "Title" : "Terrible, Terrible, Terrible!",
        "Author" : "authoradasdjlasd",
        "Overall" : "1.0",
        "Content" : "battery will die.I hope this helps!!",
        "Date" : "September 9, 2013"
    },
    "ProductInfo" : {
        "Name" : "Kyocera Rise (Virgin Mobile)",
        "ProductID" : "B008P2UVT0"
    }
}

这里的主要问题是我因此获得了 0 个文档。我怀疑 mongo 查询转换为 PHP 代码。即

   $query = array('$text' => array('$search'=> $term));
   $cursor = $collection->find($query);

字面意思是你的$doc没有Reviews.Title键。我不知道你的结构是什么,但看起来你没有必要向密钥添加Reviews.,或者如果它是嵌入的文档,你应该用$doc['Reviews']['Title']访问它。无论哪种方式,请尝试var_dump您的$doc以查看其中的内容。