2016-04-26 16 views
2

Ich versuche, Textsuche in MongoDB mit PHP zu implementieren. Ich habe notwendigen Textindex auf der Sammlung erstellt und Mongo-Abfragen mit Operatoren $ Text, $ Suche funktionieren gut. Bei der Verwendung von PHP stehe ich jedoch vor einigen Fehlern bei der Suche nach Dokumenten in der mongodb-Sammlung.Textsuche in mongodb - php

Hier ist mein Code:

<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

Notice: Undefined index: Reviews.Author in C: \ xampp \ htdocs \ MongoSearch \ index.php on line 42

Hinweis: Nicht definiert Index: Reviews.Overall in C: \ xampp \ htdocs \ MongoSearch \ index.php on line 43

Hinweis: Nicht definiert Index: Reviews.Title in C: \ xampp \ htdocs \ MongoSearch \ index.php auf der Leitung 41

Hinweis: Nicht definiert Index: Reviews.Author in C: \ xampp \ htdocs \ MongoSearch \ index.php auf Leitung 42

Hinweis: Nicht definiert Index: Reviews.Overall in C: \ xampp \ htdocs \ MongoSearch \ index.php on line 43


Kann jemand den Fehler in diesem Code aufzeigen? Der Textindex ist ordnungsgemäß auf dieser Sammlung aufgebaut. Unter der Mongo-Abfrage funktioniert die Sammlung einwandfrei. Diese

db.getCollection('reviews').find({$text: {$search : 'terrible'}}) 

ist Struktur des resultierenden Dokuments:

{ 
    "_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" 
    } 
} 

Das Hauptproblem dabei ist, dass ich erhalte 0 Dokumente als Ergebnis. Ich bezweifle die Mongo Query-Übersetzung in PHP-Code. heißt

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

Antwort

2

Es bedeutet wörtlich, dass Ihr $doc nicht Reviews.Title Schlüssel hat. Ich weiß nicht, wie Ihre Struktur ist, aber es sieht so aus, als ob Sie unnötig sind, Reviews. zu dem Schlüssel hinzuzufügen, oder wenn es ein eingebettetes Dokument ist, sollten Sie darauf mit $doc['Reviews']['Title'] zugreifen. Wie auch immer, versuchen Sie var_dump Ihre zu sehen, was drin ist.

+1

Hallo, ich habe meine Frage bearbeitet. Ich habe auch Struktur meines Dokuments hinzugefügt. Sie haben Recht, dass $ doc überhaupt keine Bewertungen hat, aber meine Hauptfrage betrifft nur das. Warum bekomme ich 0 Dokumente mit PHP, wenn ich schon Dokumente mit normaler Mongo-Abfrage mit Mongo-Shell bekomme. Ist bei der Query-Übersetzung in PHP etwas falsch? –

+1

gut $ doc ['Reviews'] ['Title'] hat es geschafft. Vielen Dank!! –