2017-04-14 50 views
1

我的文檔:

{ 
    name: 'mcrtwrtretca' 
} 

我的指數:

{ 
     "v" : 2, 
     "key" : { 
      "_fts" : "text", 
      "_ftsx" : 1 
     }, 
     "name" : "$**_text", 
     "ns" : "mydb.cvs", 
     "background" : true, 
     "weights" : { 
      "$**" : 1 
     }, 
     "default_language" : "english", 
     "language_override" : "language", 
     "textIndexVersion" : 3 
    } 

查詢1:

db.getCollection('cvs').find({$text: {$search: 'mcrtwrtretca', $language: 'english'}}) 

返回1項。

查詢2:

db.getCollection('cvs').find({$text: {$search: 'mcrtwrtretca', $language: 'swedish'}}) 

返回0項。

查詢3

db.getCollection('cvs').find({$text: {$search: 'mcrtwrtretca', $language: 'dutch'}}) 

返回1項。

如果我在結尾處刪除'a'所有三個返回結果。

我不明白。不管$language是什麼,如果有完全匹配,它會不會總是一炮走紅?

回答

1

當您指定語言時,您告訴mongo使用語言特定的停用詞和後綴詞幹。如果您使用不同的語言來索引文檔並查詢文檔,則由於不同語言中的規則不同,結果可能會出現意外。在你的特定情況下,它必須是因爲a是瑞典語中一個常見的詞建立後綴,但不是英文。

如果您需要支持多種語言,則需要specify language in the document本身。

如果您對完全匹配感興趣,請在索引和查詢中使用語言'none'。

瞭解更多關於文本搜索在這裏蒙哥是如何工作的:https://docs.mongodb.com/manual/core/index-text/

+0

請告訴我點,然後到指定的查詢語言? – Per

+0

除非查詢中的語言與文檔中的語言匹配,否則不存在。當兩者相同時,相同的後綴詞幹和停用詞規則同時適用於文檔和查詢,從而導致更準確的文本搜索。例如。如果您將文檔更改爲「{」name「:」mcrtwrtretca「,」language「:」swedish「}',那麼當您將查詢語言指定爲」瑞典語「時,它將返回搜索詞」mcrtwrtretc「和」mcrtwrtretca「 」。 –

相關問題