MongoDB .NET 驱动程序和文本搜索

标签 mongodb linq

我正在使用这个 MongoDB 驱动程序:https://mongodb.github.io/mongo-csharp-driver/
我想使用文本索引进行搜索,它(我认为)是在所有文本字段上创建的,如下所示:

{
    "_fts" : "text",
    "_ftsx" : 1
}

我正在使用 linq 查询来过滤数据,例如:
MongoClient client = new MongoClient(_mongoConnectionString);
IMongoDatabase mongoDatabase = client.GetDatabase(DatabaseName);
var aCollection = mongoDatabase.GetCollection<MyTypeSerializable>(CollectionName);

IMongoQueryable<MyTypeSerializable> queryable = aCollection.AsQueryable()
                .Where(e=> e.Field == 1);
var result = queryable.ToList();

如何使用此方法进行文本搜索?

最佳答案

寻找解决方案我找到了 FilterDefinition<T>.Inject() 扩展方法。
所以我们可以更深入地在 IMongoQueryable<T> 上再创建一个扩展。 :

public static class MongoQueryableFullTextExtensions
{
    public static IMongoQueryable<T> WhereText<T>(this IMongoQueryable<T> query, string search)
    {
        var filter = Builders<T>.Filter.Text(search);
        return query.Where(_ => filter.Inject());
    }
}

并像这样使用它:

IMongoDatabase database = GetMyDatabase();

var results = database
    .GetCollection<Blog>("Blogs")
    .AsQueryable()
    .WhereText("stackoverflow")
    .Take(10)
    .ToArray();

希望这对某人有所帮助:)

关于MongoDB .NET 驱动程序和文本搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40915209/

相关文章:

c# - MongoDBRef 如何编写查询

javascript - 这个 mongoskin 聚合命令有什么问题?

mongodb - 没有SQL。服务器崩溃时丢失了多少数据?

c# - IQueryable<T> 不包含 'Include' 的定义并且没有扩展方法 'Include'

c# - Expression.PropertyOrField 中的 AmbiguousMatchException

c# - 某些值的扩展方法 IEnumerable.Average() 的输出是否错误?

需要带有 Nodejs 示例的 RESTful MongoDB

mysql - 将 Mysql 查询转换为 Mongodb find()

c# - Sql查询与Linq数据查询性能对比

sql - 简单的 Linq 问题 : How to select more than one column?