2016-10-24 49 views
2

我對MongoDB數據庫有一個很奇怪的問題。我有一個收集近10,000條記錄。它有一個複合索引和一個常規索引。在某些情況下,MongoDB文本索引不會返回正確的結果

複合指數:

{ 
    is_archived: 1, 
    name: 'text', 
    ean: 'text', 
    model: 'text', 
    mpn: 'text', 
    upc: 'text', 
    notes: 'text' 
} 

常規:

{ 
    is_archived: 1 
} 

說有是集合在這樣的記錄:

{ 
    is_archived: false, 
    name: 'String1 string2 string3 string4' 
    ean: '', 
    model: '', 
    mpn: '', 
    upc: '', 
    notes: ''  
    } 

這樣的查詢(以目標以任何順序返回包含所有這些詞的所有文檔):

db.collection.find({ 
    is_archived: false, 
    $text: { 
     $search: '"String1""string2""string3""string4"' 
    } 
}) 

將返回上述文件。

這樣的查詢:

db.collection.find({ 
    is_archived: false, 
    $text: { 
     $search: '"String1""string2"' 
    } 
}) 

將返回上述文檔。

這樣的查詢:

db.collection.find({ 
    is_archived: false, 
    $text: { 
     $search: '"string2""string3"' 
    } 
}) 

將返回上述文檔。

的查詢是這樣的:

db.collection.find({ 
    is_archived: false, 
    $text: { 
     $search: '"String1""string3"' 
    } 
}) 

不會回報上述聲明。

同樣的問題也會出現在其他文檔中,但不會與所有文檔一起出現。

  • 我正在運行版本2. *的MongoDB。新版本的同一個數據庫也有同樣的問題。
  • 我試圖複製它在一個新的數據庫沒有成功。
  • 我試圖重新索引/刪除並重新創建索引沒有任何運氣。

我想問兩個問題:

  • 你以前見過嗎?它有任何意義嗎?
  • 調試此問題的正確方法是什麼?我應該使用explain

謝謝你們,這個問題真的讓我發瘋。

+0

看看[這個鏈接](https://docs.mongodb.com/manual/reference/operator/query/text/#phrases)可以幫助你。 – Shrabanee

+1

謝謝@Shrabanee。我不認爲這些查詢有什麼問題。否則,所有的查詢都不會返回任何內容。在這種情況下,一些查詢可以工作,而有些則不能 – kbariotis

回答

0

默認情況下,搜索短語使得在所有指定關鍵字的OR搜索,也就是說,它會尋找使用一個包含關鍵字字符串1,字符串,STRING3或串,4

db.collection.find({$text: {$search: "String1 String3"}}, {score: {$meta: "text Score"}}).sort({score:{$meta:"text Score"}}) 

文件,我覺得你人失蹤String1和String3之間的空間。

+0

我的目標是搜索任何包含所有這些單詞的文檔。這是引號的目的。空間也不會改變任何東西。謝謝 – kbariotis

相關問題