php - mongodb 中的文本搜索 - php

标签 php mongodb full-text-search

我正在尝试使用 PHP 在 MongoDB 中实现文本搜索。我已经在集合上创建了必要的文本索引,并且使用运算符 $text 、 $search 进行 Mongo 查询工作正常。但是,使用 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>';
}
?>

Error: Connection to database successfully object(MongoCursor)#4 (0) { } Notice: Undefined index: Reviews.Title in C:\xampp\htdocs\MongoSearch\index.php on line 41

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

注意:未定义索引:Reviews.Overall 位于 C:\xampp\htdocs\MongoSearch\index.php 第 43 行

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

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

注意:未定义索引:Reviews.Overall 位于 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. 添加到 key 中,或者如果它是嵌入式文档,您应该使用 $doc['Reviews'][ 访问它'标题']。无论哪种方式,请尝试var_dump检查您的$doc以查看其中的内容。

关于php - mongodb 中的文本搜索 - php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36854359/

相关文章:

c# - MongoDB:是否可以在文档中使用第二个 objectID 以用于更新的并发检查?

javascript - mongoDB - 游标仅使用 node.js 驱动程序更新 1 个文档

PHP 函数和 SQL 失败

php - MySQL,SubSelect,这可能吗?

php - apache2 + MPM-ITK + PHP = 套接字不起作用

哈希和升序索引之间的 Mongodb 性能差异(有什么理由不在无序字段中使用哈希?)

python - google-app-engine 全文搜索,哪个更好, "google custom search"或 whoosh

sqlite - 我可以在 FTS 查询中使用 AND 语句吗?

full-text-search - 使用 DB4O 进行全文搜索

php - AWS Beanstalk 文档目录