C# 使用MongoDB进行多属性全文搜索
我有这个C# 使用MongoDB进行多属性全文搜索,c#,mongodb,C#,Mongodb,我有这个C#代码来查询我的MongoDB集合: var query = myCollection.FindAll().AsQueryable(); if (!string.IsNullOrWhiteSpace(username)) query = query.Where( x => x.User.FullName.IndexOf(username, StringComparison.OrdinalIgnoreCase) >= 0); if (!string.IsNullO
C#
代码来查询我的MongoDB
集合:
var query = myCollection.FindAll().AsQueryable();
if (!string.IsNullOrWhiteSpace(username))
query = query.Where(
x => x.User.FullName.IndexOf(username, StringComparison.OrdinalIgnoreCase) >= 0);
if (!string.IsNullOrWhiteSpace(productName))
query = query.Where(
x => x.Product.ProductName.IndexOf(productName, StringComparison.OrdinalIgnoreCase) >= 0);
query = query.Take(pageSize).Skip(pageSize*(pageNumber-1));
var itemCount=query.Count();
var result = query.ToList();
由于性能低下,现在我想使用全文搜索。我为User.FullName
和Product.ProductName
创建了text
索引,并开始编写如下代码:
var textSearchCommand = new CommandDocument
{
{ "text", myCollection.Name },
{ "search", username }
};
var commandResult = _database.RunCommand(textSearchCommand);
var result = commandResult.Response;
现在我被卡住了;如何在上面的语法示例中指定属性名称?这是正确的方法吗?文本索引指向整个文档,而不是指向匹配发生的单个字段。这意味着文本搜索总是在作为文本索引一部分的所有字段上执行。不能有选择地只在一个字段中搜索匹配项
但您可以做的是使用其他运算符进一步过滤-运算符的结果集。例如,您可以使用一个附加的-运算符来检查您搜索的字符串是否出现在您希望它出现的字段中。不太确定您在这里的意思。您的实际文档是什么样子的?哪些字段实际上被索引了?可以在全文索引中指定多个字段。即使你每件收藏品只能有一件。我想我错过了一些东西!想一想这个非常普通和简单的例子:一个巨大的用户对象集合(200.000),包含名称和城市,还有一个简单的搜索表单,我可以在其中键入部分名称和部分城市名称。。。我必须使用没有索引的RegHex吗?现在,一个只有80000个文档的类似查询需要4秒钟@danyolgiax MongoDB文本索引不适用于部分单词。他们只能根据语言设置搜索各种语法排列的完整单词。当您想要搜索不完整的单词时,必须使用$regex。但请注意,当正则表达式以字符串锚点开头时,它们可以受益于索引。因此,当用户开始键入“New”时,您可以搜索
{city:{$regex:“^New”}}
,并通过city
上的索引找到“New York”、“New Orleans”和“Newcastle”。用最后一条评论保存了我!谢谢!