我使用这个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();
如何使用此方法利用文本搜索?
发布于 2019-03-22 07:23:31
在寻找解决方案时,我找到了FilterDefinition.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();
希望这对某些人有帮助:)
发布于 2016-12-02 00:32:41
这样如何:
IMongoQueryable<MyTypeSerializable> queryable = aCollection
.AsQueryable()
.Where(e=> e.Field.Contains("term"));
https://stackoverflow.com/questions/40915209
复制相似问题