मैं मोंगोडब के साथ एक पूर्ण पाठ खोज बनाना चाहता हूं। मैं निम्नलिखित क्वेरी कैसे बना सकता हूं। क्वेरी बिल्डर 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;
}
यह सबसे अधिक परिष्कृत तरीका नहीं है। लेकिन यह आपको दस्तावेजों के वांछित सेट के साथ प्रदान करेगा।