2016-05-17 98 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