创建索引
db.MyCollection.createIndex({'$**': 'text'}, {name: 'FullTextIndex'})搜索匹配
db.MyCollection.find({$text: {$search: 'myWord'}}).count()结果为1。对于值为"myWord is here“的字段
如果我按以下方式定期搜索选定的字段,我将得到两条记录,一条记录的名称为"myWord is here“,第二条记录的详细文件为” myWord “,详细显示为” two myWord is “。
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/
发布于 2016-06-01 15:33:22
由于我还没有找到很多通配符搜索/使用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,然后在该字段上使用Regex查询。
然后,为了提高添加了以下索引的查询的性能
_mongoConnect.Database?.GetCollection<BsonDocument>("MyCollectionName")
.Indexes.CreateOneAsync(new BsonDocument("CustomFieldsConcatenated", "hashed"), new CreateIndexOptions { Name = "CollectionName_FieldName_Index" });发布于 2016-06-06 07:13:21
注意,通配符可以包含在Regex搜索中,但不能包含在全文搜索中。
这个服务器-10227已经有了一个特性请求票。如果这是你的一个重要功能,请投票票。
对你的评论作进一步补充:
我进一步看了看。它是查找具有前缀和后缀空格的搜索键的所有结果,而不是单词中字符串的一部分。 例如,它正在返回一个值"Hello myWord is here“的记录,但不返回"HellomyWord”
$text运算符匹配完整的带词根的word.There,目前还没有处理字符串中返回有意义的投影值的索引位置的工具。在您的用例中,对术语"myWord“的搜索将与"HellomyWord”不匹配。但是,它匹配一个包含"hi myWord在这里“或"myWord来了”等内容的文档。
有关更多信息,请参见匹配操作页面。
https://stackoverflow.com/questions/37283589
复制相似问题