Tyto dvě možnosti indexu jsou velmi odlišné.
-
Když vytvoříte běžný index v řetězcovém poli, indexuje celou hodnotu v řetězci. Většinou užitečné pro jednoslovné řetězce (jako uživatelské jméno pro přihlášení), kde můžete přesně odpovídat.
-
Na druhé straně textový index tokenizuje a zastavuje obsah pole. Řetězec tedy rozloží na jednotlivé ortokeny slov a dále je zredukuje na jejich kmeny, takže varianty stejného slova se budou shodovat ("hovor" odpovídá "hovorům", "mluvil" a "mluví" například jako "mluvit" je kmen všech tří). Většinou užitečné pro pravdivý text (věty, odstavce atd.).
Vyhledávání textu
Textové vyhledávání podporuje vyhledávání obsahu řetězce v dokumentech sbírky. MongoDB poskytuje
$text
operátor pro provádění textového vyhledávání v dotazech a v agregačních kanálech.Proces vyhledávání textu:
tokenizes and stems the search term(s) during both the index creation and the text command execution. assigns a score to each document that contains the search term in the indexed fields. The score determines the relevance of a document to a given search query.
$text
operátor může vyhledávat slova a fráze. Dotaz odpovídá úplným slovům se kmenem. Pokud například pole dokumentu obsahuje slovo borůvka, hledání výrazu modrá nebude odpovídat dokumentu. Vyhledání borůvky nebo borůvky však bude odpovídat. -
$regex
vyhledávání lze použít s běžnými indexy v řetězcových polích, což umožňuje určité porovnávání vzorů a vyhledávání pomocí zástupných znaků. Není to příliš efektivní uživatel indexů, ale bude používat indexy, kde může:Pokud pro pole existuje index, MongoDB porovná regulární výraz s hodnotami v indexu, což může být rychlejší než skenování kolekce. Další optimalizace může nastat, pokud je regulární výraz „výraz předpony“, což znamená, že všechny potenciální shody začínají stejným řetězcem. To umožňuje MongoDB vytvořit „rozsah“ z této předpony a porovnávat pouze s těmi hodnotami z indexu, které spadají do tohoto rozsahu.
http://docs.mongodb.org/manual/core/index-text/
http://docs.mongodb.org/manual/reference/operator/query/regex/