solr.net的使用

solr.net的使用

引子

最近在做一个日志系统,用普通关系型数据库做数据查询遇到了查询的瓶颈,想到了用成熟的搜索应用服务,我所知道的比较成熟的搜索应用服务有solr和es(elasticsearch),由于时间比较仓促,最后选择了比较熟悉的solr。

简介SOLR

Solr是一个高性能,采用Java5开发,Solr基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎,他是基于Lucene的封装比较成熟的全文搜索服务器。solr怎样部署在windows服务器上的,推荐一枚信峰的博客http://www.cnblogs.com/wenxinghaha/tag/.net%20%20solr/,他这里写的比较详细。solr的5.0目前不支持IK分词,所以只好使用4.10版本,solr 的部署也比较方便,再部署的时间可以通过配置文件将数据库的数据索引到solr服务器内,并且能根据索引时间定时的同步数据到solr服务器。

solr在.NET中的驱动

我们在做查询的时间是使用过的C#语言,所以要用到solr在.NET中的驱动,目前比较流行的有solr.NET和easynet.solr,solr.NET是一个比较稳定的开源的solr驱动,easynet.solr是国内一同行在solr.NET上面做了封装,我采用的是最原生的solr.net,驱动下载地址https://github.com/mausch/SolrNet。由于solr服务器是提供restful接口的操作的,所以solrnet对于solr服务的请求其实还是基于http请求的

solrnet的应用

solrnet的应用我就做过多的说明了,在这里我主要是想说一下solrnet的分组查询

附代码

 public  class SolrNetOperate
    {
        static SolrNetOperate()
        {
            Startup.Init<LogItems>("http://000.000.000.000:8080/solr/logs");
        }

        /// <summary>
        /// </summary>
        /// <param name="dictPars">查询参数字典</param>
        /// <param name="start">分页开始标识</param>
        /// <param name="rows">每页数量</param>
        /// <param name="startTime">开始时间</param>
        /// <param name="endTime">结束时间</param>
        /// <param name="count">输出参数 总个数</param>
        /// <returns></returns>
        /// <remarks>oldman 2015年7月23日14:11:43</remarks>
        public static List<int> GroupingSerach(Dictionary<string, string> dictPars, int start, int rows,
            DateTime startTime, DateTime endTime, out int count)
        {
            //定义solr
            var solr = ServiceLocator.Current.GetInstance<ISolrOperations<LogItems>>();
            var queryOptions = new QueryOptions();
            //定义分组
            var groupingParameters = new GroupingParameters();
            groupingParameters.Fields = new Collection<string> { "logs_id" };
            groupingParameters.Ngroups = true; //设置查询分组的总个数为true
            //定义过滤条件
            var timeRange = new SolrQueryByRange<DateTime>("logs_time", startTime, endTime);
            queryOptions.AddFilterQueries(timeRange);
            foreach (string key in dictPars.Keys)
            {
                queryOptions.AddFilterQueries(new SolrQueryByField(key, dictPars[key]));
            }
            //定义排序
            queryOptions.OrderBy = new Collection<SortOrder> { new SortOrder("logs_id", Order.DESC) };
            queryOptions.Grouping = groupingParameters;
            queryOptions.Start = start;
            queryOptions.Rows = rows;
            SolrQueryResults<LogItems> res = solr.Query(SolrQuery.All, queryOptions);
            GroupedResults<LogItems> items = res.Grouping["logs_id"];
            count = items.Ngroups ?? 0;
            return items.Groups.Select(item => Convert.ToInt32(item.GroupValue)).ToList();
        }
    }

这里是分组后做查询,排序和分页,代码很清晰,有问题可以和我交流

时间: 2024-08-04 04:53:25

solr.net的使用的相关文章

solr分布式索引【实战一、分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例】

1 private static Properties prop = new Properties(); 2 3 private static String confFilePath = "conf" + File.separator + "config.properties";// 配置文件目录 4 static { 5 // 加载properties 6 InputStream is = null; 7 InputStreamReader isr = null;

linux集群下 solr集群搭建

首先介绍一下系统架构: * 这个图中代表的是三个solr实例,每个实例包括两个core,组成一个solrcloud * 索引集合包括两个 shard(shard1和shard2),shard1和shard2分别由三个core组成,其中一个L eader两个Replication,Leader是由zookeeper选举产生,zookeeper控制每个shard上三个core的索引数据一致,解决高可用和高并发问题. * Collection在solrcloud集群中是一个索引结构,被划分为一个或多个

solr练习

环境  Linux    tomcat7    solr 上linux解压IK  和 solr 新建文件夹保存 1第一步复制jar  solor>example > ext 下的所有的jar拷贝至tomcat的lib下 2将solr.war拷贝至tomcat的webapps下注意解压   war解压不会保留目录一定要先创建一个文件夹 mkdir   solr. 然后将其解压至该文件夹中解压war使用unzip命令  然后删除其war包  不删除tomcat的运行将其解压会替换 3进入tomca

Elasticsearch VS Solr

最近公司用到了ES搜索引擎,调研发现大公司常用的搜索引擎还有Solr. 鉴于 Lucene 强大的特性和稳定性,有很多种基于 Lucene 封装的企业级搜索平台.其中最流行有两个:Apache Solr 和 Elastic search. Apache Solr:它本身是 Apache Lucene 项目下的开源企业搜索平台,算是 Lucene 的直系.美团.阿里搜索服务是基于 Solr 来搭建的. Elastic Search:简称 ES,由 Elastic 公司开发.Elastic 成立于

Solrcloud(Solr集群)

Solrcloud(Solr集群) Solrcloud介绍: SolrCloud(solr集群)是Solr提供的分布式搜索方案. 当你需要大规模,容错,分布式索引和检索能力时使用SolrCloud. 当索引量很大,搜索请求并发很高时,同样需要使用SolrCloud来满足这些需求. 不过当一个系统的索引数据量少的时候是没有必要使用SolrCloud的. SolrCloud是基于Solr和Zookeeper的分布式搜索方案.它的主要思想是使用Zookeeper作为SolrCloud集群的配置信息中心

Solr

Solr Solr它是一款非常优秀的全文搜索引擎,它是一种开放源码的.基于Lucene的企业级搜索应用服务器.它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果. 官方网址:http://lucene.apache.org/solr/ 官方文档:http://lucene.apache.org/solr/resources.html#documen

solr初认识

Solr : Search On Lucene Replication Solr 基本概况 Apache Solr (读音: SOLer) 是一个开源的搜索服务器.Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现.Apache Solr 中存储的资源是以 Document 为对象进行存储的.每个文档由一系列的 Field 构成,每个 Field 表示资源的一个属性.Solr 中的每个 Document 需要有能唯一标识其自身的属性,默认情况下这个属性的

solr笔记

1.solrclound启动 solr start -c -z server200:2181,server201:2181 2.上传文件 2.1先创建路径后上传文件 zkcli.sh -zkhost server200:2181,server201:2181 -cmd makepath /xxx zkcli.sh -zkhost server200:2181,server201:2181 -cmd putfile zkpath localpath 3.删除文件 zkcli.sh -zkhost 

玩转大数据系列之Apache Pig如何与Apache Solr集成(二)

散仙,在上篇文章中介绍了,如何使用Apache Pig与Lucene集成,还不知道的道友们,可以先看下上篇,熟悉下具体的流程. 在与Lucene集成过程中,我们发现最终还要把生成的Lucene索引,拷贝至本地磁盘,才能提供检索服务,这样以来,比较繁琐,而且有以下几个缺点: (一)在生成索引以及最终能提供正常的服务之前,索引经过多次落地操作,这无疑会给磁盘和网络IO,带来巨大影响 (二)Lucene的Field的配置与其UDF函数的代码耦合性过强,而且提供的配置也比较简单,不太容易满足,灵活多变的