2016-07-20 17 views
3

私は私の文書、インデックス、それにフィールド「SEARCH_STRING」を追加します。 db.my_collection.createIndex({search_string: "text"}) SEARCH_STRINGはこれを含んでいます「ARはARENアリーナです」。モンゴDB検索

私はこれでレコードを見つけることができます:db.my_collection.find({$text: {$search: 'ar'}})db.my_collection.find({$text: {$search: 'аren'}})db.my_collection.find({$text: {$search: 'arenа'}})が、db.my_collection.find({$text: {$search: 'а'}})db.my_collection.find({$text: {$search: 'аre'}})戻って何も。なぜそれが起こるのですか?

答えて

4

MongoDBの manual

マッチ操作からのストップワード

は$テキストオペレータは、このような英語ととして、言語固有のストップワードを無視します。

"a"と "are"の両方がデフォルトの英語のストップワードのリストにありますので無視されます。英語のストップワードを素早くGoogle検索すると、完全なリストを含むたくさんのページが見つかります。デフォルトでは

+0

どのように私はこの言葉を無視することができますか? –

+0

ストップワードと検索文字列のためのステマーとトークナイザのための規則のリストを決定する言語を指定するには、$テキスト式で、オプションの$言語のフィールドを使用して異なる言語 検索」 再びマニュアルから。 あなたが「なし」の言語値を指定すると、テキスト検索がストップワードのリストなしで、単純なトークン化を使用していないし、何の語幹。」 だから私は、noneとして$言語を指定すると、それを行うかもしれませんね。 – ElPedro

+0

$ language: "none" - 役に立たない –

1

は、MongoDBは、テキストインデックスのための英語を使用し、ストップワードは、索引付けされません。

"none"の言語値を指定すると、テキスト検索ではストップワードのリストがなく、ステミングがない単純なトークン化が使用されます。

だから、このようなあなたのインデックスを作成する必要があります。

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

MongoDBのドキュメントhere