2015-05-20 106 views
2

我想在我的收藏中做一個查詢,但它沒有返回任何東西。MongoDB文本搜索失敗停止詞

這裏是我的query

{'$match': {'$text': {'$search': 'a'}}}, 
{'$group': {'_id': {'texto': '$texto'}, 
      'somanumero': {'$sum': '$numero'}}} 

我的收藏:

{ "_id" : ObjectId("555cdc4fe13823315537042d"), "texto" : ObjectId("555cdc4fe13823315537042c"), "numero" : ObjectId("555cdc4fe13823315537042e") } 
{ "_id" : ObjectId("555cdc5ee13823315537042f"), "numero" : 5, "texto" : "a", "lattexto" : "-15.79506", "lontexto" : "-47.88322" } 
{ "_id" : ObjectId("555cdc6ae138233155370430"), "numero" : 10, "texto" : "a", "lattexto" : "-15.79506", "lontexto" : "-47.88322" } 
{ "_id" : ObjectId("555cdc73e138233155370431"), "numero" : 3, "texto" : "b", "lattexto" : "-15.79506", "lontexto" : "-47.88322" } 

這是我的文本索引:

{ 
    "v" : 1, 
    "key" : { 
     "_fts" : "text", 
     "_ftsx" : 1 
    }, 
    "name" : "texto_text", 
    "ns" : "OSA.teste_texto", 
    "default_language" : "portuguese", 
    "weights" : { 
     "texto" : 1 
    }, 
    "language_override" : "language", 
    "textIndexVersion" : 2 
} 

當我使用$group$match孤獨,它的工作原理。

我做錯了什麼?

+0

剛剛做'$ match'時的迴應是什麼?一個常見的錯誤是沒有意識到聚合作爲一個流水線,下一個階段(在這種情況下是'$ group')將會影響第一個('$ match')的結果。 – Verran

+0

你可以單獨發佈'$ match'和'$ group'的結果嗎? – bagrat

回答

2

docs

的MongoDB支持各種語言的文本搜索。文本索引下降 語言特定的停用詞(例如英語,「the」,「an」,「a」, 「和」等),並使用簡單的語言特定的後綴詞幹。

與您的數據的問題是,一些記錄有language-specific停止詞,a,這被認爲是一個停用詞在portugese了。一些停用詞包括,並且a位於列表的頂部。

a 
ao 
aos 
aquela 
aquelas 
aquele 
aqueles 
aquilo 
as 
até 
com 
como 

這些字從未索引,因此只要你查詢停止的話,你會得到任何結果。

與此同時,如果您查詢b,您將得到結果,因爲它不是一個停用詞並且會被編入索引。

+1

你說得對。我將默認語言設置爲「無」,它工作。謝謝。 –

+0

@LucasRodrigues - 非常歡迎。 – BatScream

+1

@BatScream你知道是否有辦法強制MongoDB搜索所有單詞 - 重寫他們當前的行爲停止單詞? –