PHPを使用してMongoDBでテキスト検索を実装しようとしています。コレクションに必要なテキストインデックスを作成し、$ textという演算子でMongoクエリを作成しました。$ searchは正常に動作しています。しかし、PHPを使用して、私はmongodbコレクションのドキュメントを検索する際にいくつかのエラーに直面しています。ここでmongodbのテキスト検索 - php
は私のコードです:
<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でReviews.Author:\ xamppの\ htdocsに\ MongoSearch \ライン上のindex.phpを42
お知らせ:不定索引:レビュー。全部でC:\ xampp \ htdocs \ MongoSearch \ index.php 43行目
注意:未定義のインデックス:Reviews.title in C:\ xampp \ htdocs \ MongoSearch \ index.php on line 41
注意:未定義のインデックス:CでReviews.Author:\ XAMPP \ htdocsに\ MongoSearch \ライン上のindex.php 42
注意:未定義のインデックス:CでReviews.Overall:\ XAMPP \ htdocsに\ MongoSearch \ index.php on line 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の文書を取得していますということです。私は、PHPコードへのmongoクエリー翻訳には疑問があります。 すなわち
$query = array('$text' => array('$search'=> $term));
$cursor = $collection->find($query);
こんにちは、私は私の質問を編集しました。ドキュメントの構造も追加しました。 $ docには全くレビューがありませんが、私の主な質問はそれについてだけです。なぜmongoシェルを使った通常のmongoクエリでドキュメントを取得したのにPHPを使って0ドキュメントを取得しているのですか? PHPへのクエリ翻訳に何か間違いはありますか? –
よく$ doc ['Reviews'] ['Title']はそのトリックをしました。ありがとう!! –