2016-07-20 12 views
3

Ich füge das Feld 'search_string' zu meinem Dokument hinzu und indiziere es. db.my_collection.createIndex({search_string: "text"}) Search_string enthält das: 'ar ar aren arena'.Mongo Db Suche nach indiziertem Feld

ich Datensatz mit diesem finden: db.my_collection.find({$text: {$search: 'ar'}}), db.my_collection.find({$text: {$search: 'аren'}}), db.my_collection.find({$text: {$search: 'arenа'}}), aber db.my_collection.find({$text: {$search: 'а'}}) und db.my_collection.find({$text: {$search: 'аre'}}) kehrt nichts. Warum passiert es?

Antwort

4

Aus den MongoDB manual

Spiel Betrieb

Stop-Wörter ignoriert

Die $ Text Operator sprachspezifische Stoppwörter, wie die und und in englischer Sprache.

Sowohl "a" als auch "sind" sind in der Liste der standardmäßigen englischen Sprachstoppwörter und werden daher ignoriert. Eine schnelle Google-Suche nach englischen Stoppwörtern findet viele Seiten mit der vollständigen Liste.

+0

Wie kann ich diese Worte ignorieren? –

+0

Aus dem Handbuch wieder „Suche in eine andere Sprache Verwenden Sie das optionale Feld $ Sprache im $ Textausdruck eine Sprache angeben, die die Liste der Stoppwörter und die Regeln für die stemmer und tokenizer für den Suchbegriff bestimmt. Wenn Sie einen Sprachwert von "none" angeben, verwendet die Textsuche eine einfache Tokenisierung ohne Liste mit Stoppwörtern und ohne Stammverweise. " Also schätze ich $ Sprache angeben, da niemand es tun könnte. – ElPedro

+0

$ Sprache: "keine" - hilft nicht –

1

Standardmäßig verwendet MongoDB Englisch als Textindex und die Stoppwörter werden nicht indiziert.

Wenn Sie einen Sprachwert von "none" angeben, verwendet die Textsuche einfache Tokenization ohne Liste von Stoppwörtern und ohne Stemming.

So sollten Sie Ihren Index wie folgt erstellen:

db.my_collection.createIndex( { search_string : "text" }, { default_language: "none" } )

MongoDB Dokumentation here.