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);
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? –
gut $ doc ['Reviews'] ['Title'] hat es geschafft. Vielen Dank!! –