首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB全文搜索

MongoDB全文搜索
EN

Stack Overflow用户
提问于 2016-05-17 18:19:26
回答 2查看 1.8K关注 0票数 7

创建索引

代码语言:javascript
复制
db.MyCollection.createIndex({'$**': 'text'}, {name: 'FullTextIndex'})

搜索匹配

代码语言:javascript
复制
db.MyCollection.find({$text: {$search: 'myWord'}}).count()

结果为1。对于值为"myWord is here“的字段

如果我按以下方式定期搜索选定的字段,我将得到两条记录,一条记录的名称为"myWord is here“,第二条记录的详细文件为” myWord “,详细显示为” two myWord is “。

代码语言:javascript
复制
db.getCollection('MyCollection').find({  
     "$or":[{"Name":/myWord/i}, {"Details":/myWord/i}]
    }).sort({"Name": 1})

如何重新创建索引,使其在所有字段中搜索为SQL,其中任何字段(如%searchText% )

最后,如何在C#驱动程序中编写这个搜索查询?

更新:

我进一步看了看。它是查找具有前缀和后缀空格的搜索键的所有结果,而不是单词中字符串的一部分。

例如,它正在返回一个值"Hello myWord is “的记录,但不返回

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-01 15:33:22

由于我还没有找到很多通配符搜索/使用Mongo的全文搜索的帮助,我已经为我的需求提出了一项工作。

代码语言:javascript
复制
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,然后在该字段上使用Regex查询。

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

代码语言:javascript
复制
  _mongoConnect.Database?.GetCollection<BsonDocument>("MyCollectionName")
                .Indexes.CreateOneAsync(new BsonDocument("CustomFieldsConcatenated", "hashed"), new CreateIndexOptions { Name = "CollectionName_FieldName_Index" });
票数 3
EN

Stack Overflow用户

发布于 2016-06-06 07:13:21

注意,通配符可以包含在Regex搜索中,但不能包含在全文搜索中。

这个服务器-10227已经有了一个特性请求票。如果这是你的一个重要功能,请投票票。

对你的评论作进一步补充:

我进一步看了看。它是查找具有前缀和后缀空格的搜索键的所有结果,而不是单词中字符串的一部分。 例如,它正在返回一个值"Hello myWord is here“的记录,但不返回"HellomyWord”

$text运算符匹配完整的带词根的word.There,目前还没有处理字符串中返回有意义的投影值的索引位置的工具。在您的用例中,对术语"myWord“的搜索将与"HellomyWord”不匹配。但是,它匹配一个包含"hi myWord在这里“或"myWord来了”等内容的文档。

有关更多信息,请参见匹配操作页面。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37283589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档