c# – MongoDB全文搜索

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

搜索匹配

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

对于具有“myWord is here”值的字段,结果为1.

如果我经常搜索所选字段如下,我得到两条记录,一条记录名称=“myWord就在这里”,第二条记录中的“myWord”在详细信息中归档为“这里的东西,myWord就在这里

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

如何重新创建索引,以便在所有字段中搜索sql,其中任何字段如%searchText%

最后,我如何在C#Driver中编写此搜索查询

更新:

我进一步调查了它.它找到所有带有前缀和后缀空格的搜索键的结果,但不是单词中字符串的一部分.

示例它返回值“Hello myWord is here”的记录,但不返回“HellomyWord”

但根据这份文件,它必须支持通配搜索. https://docs.mongodb.com/v3.0/reference/operator/query/text/

解决方法

由于我没有找到很多有关使用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++;
 }

我读了每组文档的自定义字段列表,然后创建一个连接的Mongo字段,然后在该字段上使用正则表达式查询.

然后提高查询性能,添加以下索引

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

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...