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”。用最后一条评论保存了我!谢谢!