全文检索~solr的使用

全文检索这个系列在几前年写过lucene的文章,而现在看来它确实已经老了,它的儿子孙子都出来了,已经成为现在检索行列的主流,像solr,elasticsearch等,今天我们主要来看一个solr在aspnetcore里的使用,也就是增删改查之类的,比较容易!

nuget包:solrnet

注入方式:全局单例注入

使用方式:构造方法注入

solr管理系统:它有自己的ui界面

solr里core:类似于关系型数据库里的表,mongodb里的集合

一 solr管理系统

二 注入方式:全局单例注入

  services.AddSolrNet(o =>
            {
                o.ServerUrl = "http://192.168.200.214:8081/solr/system_companysubject";
                o.UserName = "sa";
                o.Password = "sa";
            });

使用方式:构造方法注入

复制代码
     #region Private Fields

        private ICache _cache;
        private RepositoryConfig _config;
        private HttpClient _httpClient = new HttpClient();
        private ILogger _logger;
        private IProducer _producer;
        private IRepository<userinfo> _repository;
        private ISolrOperations<System_CompanySubject> _solrOperations;

        #endregion Private Fields

        #region Public Constructors

        public ValuesController(
            IRepository<userinfo> repository,
            IProducer producer,
            ILogger logger,
            ISolrOperations<System_CompanySubject> solrOperations,
            RepositoryConfig config,
            ICache cache)
        {
            _cache = cache;
            _config = config;
            _solrOperations = solrOperations;
            _logger = logger;
            _producer = producer;
            _repository = repository;
            _httpClient.Timeout = new TimeSpan(0, 0, 10);
            _httpClient.DefaultRequestHeaders.Connection.Add("keep-alive");
        }

        #endregion Public Constructors
复制代码

solr实现的增删改查,很是简单

复制代码
  #region solr相关
        [Route("~/Solr")]
        public IEnumerable<string> Solr(string companyId, string subjectName)
        {
            List<ISolrQuery> query = new List<ISolrQuery>();
            if (!string.IsNullOrWhiteSpace(companyId))
                query.Add(new SolrQueryByField("companyId", companyId));
            if (!string.IsNullOrWhiteSpace(subjectName))
                query.Add(new SolrQueryByField("subjectName", subjectName));

            var subjects = _solrOperations.Query(new SolrMultipleCriteriaQuery(query, Operator.AND), new QueryOptions
            {
                StartOrCursor = new StartOrCursor.Start(0),
                // Rows = 1
            });

            if (subjects != null && subjects.Count > 0)
            {
                foreach (var item in subjects)
                {
                    yield return $"company:{item.CompanyId},subjectName:{item.SubjectName}";
                }
            }
        }
        [Route("~/SolrAdd")]
        public string SolrAdd()
        {
            _solrOperations.Add(new System_CompanySubject
            {
                Id = "101",
                CompanyId = 1,
                SubjectName = "测试现金",
                SubjectNo = "1001",
            });
            _solrOperations.Add(new System_CompanySubject
            {
                Id = "100",
                CompanyId = 1,
                SubjectName = "测试结算",
                SubjectNo = "1002",
            });
            // _solrOperations.Commit();//重新建立索引
            return "add ok";
        }
        [Route("~/SolrDel")]
        public string SolrDel(string id)
        {
            var query = new SolrQueryByField("id", id);
            _solrOperations.Delete(query);
            return "del ok";
        }
        #endregion solr相关
复制代码

感谢各位的阅读!

 

posted @   张占岭  阅读(2023)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
历史上的今天:
2016-12-20 Lind.DDD.LindAspects方法拦截的介绍
2012-12-20 IIS7集成模式~对图像服务器进行防盗链设计
2011-12-20 MVC中的统一验证机制~续
点击右上角即可分享
微信分享提示