/ / Doctrine MongoDB ODM खोज क्वेरी - php, मंगोलोड, सिम्फनी, doctrine2, doctrine-mongodb

सिद्धांत MongoDB ओडीएम खोज क्वेरी - PHP, mongodb, symfony, सिद्धांत 2, सिद्धांत-mongodb

मैं मोंगोडब के साथ एक पूर्ण पाठ खोज बनाना चाहता हूं। मैं निम्नलिखित क्वेरी कैसे बना सकता हूं। क्वेरी बिल्डर API के साथ?

db.Item.runCommand("text", {search: "Awesome"});

क्या यह संभव है? या मैं एक देशी क्वेरी को कैसे निष्पादित कर सकता हूं।

मदद के लिए शुक्रिया।

उत्तर:

जवाब के लिए 3 № 1

सुनिश्चित करें कि पाठ खोज आपके mongodb के लिए सक्षम है

http://docs.mongodb.org/manual/tutorial/enable-text-search/

पहला कदम अपने दस्तावेज़ में एक सूचकांक बनाना है:

     use DoctrineODMMongoDBMappingAnnotations as MongoDB;

/**
* Class Item
* @MongoDBDocument(repositoryClass="AcmeStoreBundleItemRepository")
* @MongoDBIndexes({
*   @MongoDBIndex(keys={"title"="text"})
* })
*/
class Item
{
/**
* @MongoDBId
*/
protected $id;

//...

}

फिर आप सूचकांक सुनिश्चित करने के लिए स्कीमा बना सकते हैं

php app/console doctrine:mongodb:schema:create

अपने कस्टम रिपॉजिटरी में अब आप इस तरह से एक कमांड क्वेरी कर सकते हैं:

http://symfony.com/doc/current/bundles/DoctrineMongoDBBundle/index.html#custom-repository-classes

public function findFullText($searchTerm, $limit = 10)
{
$resultSet = new ArrayCollection();

//-- runCommand
$itemResultSet = $this->getDocumentManager()->getDocumentDatabase("AcmeStoreBundle:Item")->command([
"text" => "Item",
"search" => $searchTerm,
"limit" => $limit
]);

foreach ($itemResultSet["results"] as $itemResult) {
$resultSet->add($this->uow->getOrCreateDocument("AcmeStoreBundleDocumentItem", $itemResult["obj"]));
}

return $resultSet;
}

यह सबसे अधिक परिष्कृत तरीका नहीं है। लेकिन यह आपको दस्तावेजों के वांछित सेट के साथ प्रदान करेगा।