【发布时间】:2016-04-26 02:38:36
【问题描述】:
我正在尝试使用 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>';
}
?>
错误: 连接数据库成功 对象(MongoCursor)#4 (0) { } 注意:未定义索引:C:\xampp\htdocs\MongoSearch\index.php 中的Reviews.Title 第41 行
注意:未定义索引:C:\xampp\htdocs\MongoSearch\index.php 中第 42 行的评论.Author
注意:未定义索引:Reviews.Overall 在 C:\xampp\htdocs\MongoSearch\index.php 第 43 行
注意:未定义索引:C:\xampp\htdocs\MongoSearch\index.php 中第 41 行的评论.Title
注意:未定义索引:C:\xampp\htdocs\MongoSearch\index.php 中第 42 行的评论.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);
【问题讨论】:
标签: php mongodb full-text-search