如何使用 C# Lambda 表达式在 MongoDb 中执行全文搜索

How to perform a full text search in MongoDb with C# Lambda expression

有很多关于如何使用 Mongodb Driver Builders 进行全文搜索的答案。 但它有另一种 ORM 方式是 lambda 表达式来过滤查询。

var collection = _mongoContextFactory.GetCollection<Foo>();
collection.FindSync(x => x.Created >= new DateTime());

那么我将如何使用 lambda 进行全文搜索(我使用提供表达式接口的规范模式)

好吧,我试图在 ExpressionFilterDefinition 中找到解决方案(MongodbDriver 将 lambda 表达式转换为此过滤器)但失败了。

因此,lambda 表达式不支持直接全文搜索。我开启了我的想象力并为此任务创建了解决方法。 我为利用全文索引

的 dto 实体制作了摘要 class
  public abstract class FullTextSearchEntity
    {
        [BsonElement("$text"), BsonIgnoreIfNull]
        public FullTextSearchOption FullTextSearch { get; set; }
    }

如您所料FullTextSearchOption 重复 BSON 结构以利用全文索引

  public class FullTextSearchOption
    {
        [BsonElement("$search"), BsonIgnoreIfNull]
        private string Search { get; set; }

        public FullTextSearchOption(string search)
        {
            Search = search;
        }
    }

最后我添加了此解决方法的使用说明:

  public class FullTextSearchSpecification<T> : SpecificationBase<T> where T: FullTextSearchEntity
    {
        private readonly string _searchQuery;

        public FullTextSearchSpecification(string searchQuery)
        {
            _searchQuery= searchQuery;
        }

        public override Expression<Func<T, bool>> ToExpression()
        {
            return entity=> entity.FullTextSearch == new FullTextSearchOption(_searchQuery);
        }
    }

宾果!