应用场景
需要在大量数据中完成快速检索
解决方案1:Lucene+分词器
批量创建索引后使用可以满足需求,但是也无需求对数据的实时性要求较高,会频繁更新索引,这时候索引操作就较慢。那么就有了下面的优化方案。
解决方案2:mongodb全文检索
由于mongodb本身不自带中文全文检索功能,那么如何来利用高效的英文全文检索呢?
考虑:英文全文检索实现就是按照空格划分内容,例:hello world,英语句子中都会按照空格划分单词。现在有没有一点思路,所以考虑只需要把内容分词按照空格分开存放一个字段,这样是不是和英文有点像。
业务场景:(和我们平常遇到的全文检索有点不一样)
每一条数据有一个热词统计,首先就需要实现分词及词频统计,然后这些结果存储数据库,最后我们的检索需要通过这些热词来进行检索。
这就是不同之处,大家一般需要的是检索整篇文章中包含搜索关键字的记录。
实现分三步: 创建索引、写数据(写入分词好的数据)、查询
上代码:
using DataSync;
using DataSync.Model;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MongoDB.Driver;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
namespace DataSyncTests
{
[TestClass]
public class UnitMongoDBTextSearch
{
[TestMethod]
public void CreateIndexKey()
{
var keys = Builders<CommentPOTest>.IndexKeys.Text(x => x.Segments);
MongoHelper.GetCollection<CommentPOTest>().Indexes.CreateOne(new CreateIndexModel<CommentPOTest>(keys));
}
[TestMethod]
public void WriteData()
{
var cursor = MongoHelper.GetCollection<CommentPO>().Find(x => true).ToCursor();
//MongoHelper.GetCollection<CommentPOTest>().InsertOne(new CommentPOTest { });
List<CommentPOTest> tests