2016-04-26 29 views
2

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); 

答えて

2

それは文字通りあなたの$docReviews.Titleキーを持っていないことを意味します。あなたの構造は分かりませんが、キーにReviews.を追加する必要がないか、埋め込まれたドキュメントの場合は$doc['Reviews']['Title']でアクセスする必要があります。どちらにしても、$docにはvar_dumpと入力してください。

+1

こんにちは、私は私の質問を編集しました。ドキュメントの構造も追加しました。 $ docには全くレビューがありませんが、私の主な質問はそれについてだけです。なぜmongoシェルを使った通常のmongoクエリでドキュメントを取得したのにPHPを使って0ドキュメントを取得しているのですか? PHPへのクエリ翻訳に何か間違いはありますか? –

+1

よく$ doc ['Reviews'] ['Title']はそのトリックをしました。ありがとう!! –

関連する問題