使用MongoDB进行多属性全文搜索

时间:2014-04-09 10:25:11

标签: 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.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();

由于性能低下,我现在想要使用全文搜索。我为textUser.FullName创建了Product.ProductName索引,我开始编写这样的代码:

var textSearchCommand = new CommandDocument
        {
            { "text", myCollection.Name },
            { "search", username }
        };
var commandResult = _database.RunCommand(textSearchCommand);
var result = commandResult.Response;

现在我被困住了;如何在上面的语法示例中指定属性名称?这是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

文本索引指向整个文档,而不是指向匹配发生的单个字段。这意味着始终对作为文本索引一部分的所有字段执行文本搜索。您不能有选择地仅在一个字段中搜索匹配项。

但您可以做的是使用其他运算符进一步过滤$text - 运算符的结果集。例如,您可以使用额外的$regex - 运算符来检查您搜索的字符串是否出现在您希望的字段中。