2016-04-26 54 views
2

我想在PHP中使用MongoDB實現文本搜索。我已經創建了必要的文本索引集合和Mongo查詢與運營商$文本,$搜索工作正常。但是,使用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

說明:未定義指數:Reviews.Author在C:\ XAMPP \ htdocs中\ MongoSearch \的index.php上線42

說明:未定義指數:Reviews.Overall在C:\ XAMPP \ htdocs中\ MongoSearch \的index.php上線43

說明:未定義指數:Reviews.Title在C:\ XAMPP \ htdocs中\ MongoSearch \的index.php上線41

說明:未定義指數:Reviews.Author在C:\ XAMPP \ htdocs中\ MongoSearch \的index.php上線42

說明:未定義指數:Reviews.Overall在C:\ 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的文檔作爲結果。我懷疑mongo查詢翻譯成PHP代碼。 即

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

回答

2

它的字面意思,你$doc沒有Reviews.Title關鍵。我不知道你的結構是什麼,但看起來你沒有必要在密鑰中加Reviews.,或者如果它是嵌入式文檔,你應該用$doc['Reviews']['Title']來訪問它。無論哪種方式,嘗試var_dump你的$doc看看它是什麼。

+1

嗨,我編輯了我的問題。我還添加了我的文檔的結構。你是正確的,$ doc根本沒有任何評論,但我的主要問題只是關於這一點。爲什麼我使用PHP獲得0個文檔?當我已經使用mongo shell獲取正常的mongo查詢文檔時。查詢翻譯到PHP有什麼不對嗎? –

+1

well $ doc ['Reviews'] ['Title']取得了訣竅。謝謝!! –