2016-05-17 96 views
7

創建索引MongoDB的全文檢索

db.MyCollection.createIndex({'$**': 'text'}, {name: 'FullTextIndex'}) 

搜索匹配

db.MyCollection.find({$text: {$search: 'myWord'}}).count() 

結果是1。已備案的具有價值 「myWord在這裏

如果我這樣做定期搜索所選字段如下,我得到兩條記錄,一條記錄有Name =「myWord在這裏」,第二條記錄有「 myWord「的詳細信息提交的」在這裏東西,myWord在這裏

db.getCollection('MyCollection').find({ 
    "$or":[{"Name":/myWord/i}, {"Details":/myWord/i}] 
    }).sort({"Name": 1}) 

我怎樣才能重新創建索引,以便它在各個領域搜索的SQL其中類似%SEARCHTEXT%的任何領域

最後我怎麼能寫在C#驅動這個搜索查詢

更新:


我進一步看着它。它會查找所有帶有前綴和後綴空格的搜索關鍵字,但不是單詞中字符串的一部分。

例如,它返回一個記錄的值「你好myWord在這裏」,但不會返回「HellomyWord

但根據這個文件,它支持通配符搜索。 https://docs.mongodb.com/v3.0/reference/operator/query/text/

+0

MongoDB全文搜索不支持通配符。如果你想使用通配符,使用正則表達式。 – Saleem

+0

正則表達式集合的每一列?我集合中的所有文檔都沒有相同的模式。每個文件有30到90個字段 – HaBo

回答

3

由於我還沒有找到,通配符搜索/使用Mongo全文搜索有很多幫助,我想出了一個解決我的要求。

foreach (var doc in batch) 
    { 
    if (custDictionary.ContainsKey(projectId)) 
     { 
      string concatenatedCustomFields = custFieldsList.Aggregate(string.Empty, 
          (current, custField) => 
           current + 
           (ds.Tables[0].Columns.Contains(custField) 
            ? (ds.Tables[0].Rows[i][custField].GetType().Name == typeof(DBNull).Name 
             ? string.Empty 
             : ((string) ds.Tables[0].Rows[i][custField]).StripHtml()) 
            : string.Empty)); 

         doc.Add("CustomFieldsConcatenated", concatenatedCustomFields); 
     } 
    i++; 
} 

我讀的自定義字段列表中爲每個組的文件,然後創建一個級聯蒙戈場,然後在該字段中使用正則表達式查詢。

然後來提高查詢的性能加入以下指標

_mongoConnect.Database?.GetCollection<BsonDocument>("MyCollectionName") 
       .Indexes.CreateOneAsync(new BsonDocument("CustomFieldsConcatenated", "hashed"), new CreateIndexOptions { Name = "CollectionName_FieldName_Index" }); 
2

注意通配符可以包含在正則表達式搜索,但沒有在全文檢索。

這個SERVER-10227已經有一個功能請求票。如果這是您的重要功能,請加快票價。

進一步增加您的評論:

我進一步看着它。它會查找所有帶有前綴和後綴空格的搜索關鍵字,但不是單詞中字符串的一部分。

例如,它返回一個記錄的值「你好myWord在這裏」,但不返回「HellomyWord」

的$文本操作上完全一致朵朵word.There目前沒有設施來處理字符串中的索引位置,這些字符串爲投影返回有意義的值。在您的用例中,搜索術語「myWord」將不匹配「HellomyWord」。然而,它匹配包含文檔,e.g,「喜myWord在這裏」在「myWord來」

欲瞭解更多信息,請參閱Match Operation頁。

+0

感謝您分享這些信息。雖然這不是我的要求的解決方案,但至少可以讓我清楚MongoDB今天支持哪些內容,以及我何時可以期待此功能。 – HaBo