sql >> Databáze >  >> NoSQL >> MongoDB

Zastavit mongodb v ignorování speciálních znaků?

Tomalakův popis toho, jak funguje indexování textu, je správný, ale ve skutečnosti můžete použít textový index pro přesnou frázovou shodu fráze se speciálním znakem:

> db.test.drop()
> db.test.insert({ "_id" : 0, "t" : "hey look at all this #text" })
> db.test.insert({ "_id" : 1, "t" : "text is the best" })
> db.test.ensureIndex({ "t" : "text" })

> db.test.count({ "$text" : { "$search" : "text" } })
2
> db.test.count({ "$text" : { "$search" : "#text" } })
2

> db.test.find({ "$text" : { "$search" : "\"#text\"" } })
{ "_id" : 0, "t" : "hey look at all this #text" }

Přesné frázové shody jsou označeny ohraničením fráze ve dvojitých uvozovkách, které je třeba v shellu uvozovat jako "\"#text\"" .

Textové indexy jsou větší než normální indexy, ale pokud provádíte mnoho přesných frázových shod bez rozlišení velkých a malých písmen, mohou být lepší volbou než standardní index, protože budou fungovat lépe. Například na pole t s indexem { "t" : 1 } , přesná shoda regulárního výrazu

> db.test.find({ "t" : /#text/ })

provede úplné skenování indexu. Analogický (ale ne ekvivalentní) textový dotaz

> db.test.find({ "$text" : { "$search" : "\"#text\"" } })

použije textový index k vyhledání dokumentů obsahujících výraz "text" a poté naskenujte všechny tyto dokumenty, abyste zjistili, zda obsahují celou frázi "#text ".

."

Buďte opatrní, protože textové indexy nerozlišují malá a velká písmena. Pokračujeme ve výše uvedeném příkladu:

> db.test.insert({ "_id" : 2, "t" : "Never seen so much #TEXT" })

> db.test.find({ "t" : /#text/ })
{ "_id" : 0, "t" : "hey look at all this #text" }

> db.test.find({ "$text" : { "$search" : "\"#text\"" } })
{ "_id" : 0, "t" : "hey look at all this #text" }
{ "_id" : 2, "t" : "Never seen so much #TEXT" }



  1. Umístění v mongoose, mongoDB

  2. jak lze uložit Json v redis pomocí hashmap (HSET)

  3. Jak najít minimální hodnotu v mongodb

  4. Čas vytvoření klíče v redis