Solr分页与高亮(使用SolrNet实现)

本节我们使用Asp.net MVC实现Solr客户端查询,建议使用SolrNet这个客户端,开源地址在:https://github.com/mausch/SolrNet

推荐的理由主要有:

1. 高效的反序列化操作;

2. 社区活跃,用户众多,有问题可以得到及时解决;

3. 最主要:使用方便。

下载后最好先编译几个DLL:SolrNet.DSL.dll  SolrNet.dll   HttpWebAdapters.dll

然后打开SampleSolrApp运行即可看到效果。由于本身自带的示例代码较繁琐,我们从简实现。

一、实现简单搜索功能:

现在Application_Start()中增加初始化代码:

SolrNet.Startup.Init<BookModel>("http://localhost:8080/solr/collection1");

注意引入SolrNet的命名空间:using SolrNet;

接着定义一个方法:

//定义solr
ISolrOperations<BookModel> solr = ServiceLocator.Current.GetInstance<ISolrOperations<BookModel>>();
QueryOptions options = new QueryOptions();
//创建条件集合
List<ISolrQuery> query = new List<ISolrQuery>();
//创建查询条件
var qTB = new SolrQueryByField("Title", keyword);
//添加条件
query.Add(qTB);
List<ISolrQuery> ar = new List<ISolrQuery>();
ar.Add(new SolrQueryByField("ContentDescription", keyword));
//创建地区之间的关系,是OR还是AND
var qArea = new SolrMultipleCriteriaQuery(ar, "OR");
//添加至条件集合
query.Add(qArea);
//按照时间倒排序.
options.AddOrder(new SolrNet.SortOrder("PublishDate", Order.DESC));
//条件集合之间的关系
var qTBO = new SolrMultipleCriteriaQuery(query, "AND");
//执行查询
SolrQueryResults<BookModel> results = solr.Query(qTBO, options);

二、高亮设置

高亮设置有多种实现方式:

1. Solr本身高亮:

 <requestHandler name="/select" class="solr.SearchHandler">
<!-- default values for query parameters can be specified, these
will be overridden by parameters in the request
-->
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">text</str>
<bool name="hl">true</bool>
<str name="hl.fl">P_NAME,COMPANY_NAME,DESCRIPTION,DAN_WEI_JJ</str>
<int name="hl.snippets">3</int>
</lst>
....
</requestHandler> <searchComponent class="solr.HighlightComponent" name="highlight">如果注释,请放开

2, 在客户端中设置参数,告诉Solr服务器返回高亮。

var high = new HighlightingParameters();
high.Fields = new List<string> { "Title" };
high.BeforeTerm = "<font color='red'><b>";
high.AfterTerm = "</b></font>";
options.Highlight = high;

同时设置高亮的标签,但是由于返回的高亮是单独的集合不能直接用于显示,所以需要合并下:

var highlights = results.Highlights;
foreach (var item in results)
{
var t = highlights[item.ID.ToString()].Values.ToList()[0].ToList()[0];
item.Title = t;
}

三、 SolrNet分页

先下载MvcPager,添加引用,在View中引入:

@model PagedList<BookModel>

添加分页标签:

@Html.Pager(Model, new PagerOptions { PageIndexParameterName = "pageIndex" })

实现分页参数传递:

int totalCount = 0, pageSize=10;
var result = Search(txtKey, pageIndex, pageSize, out totalCount);
var model = new PagedList<BookModel>(result, pageIndex, pageSize, totalCount);

给Solr的查询参数中加入分页信息:

QueryOptions options = new QueryOptions();
options.Rows = pageSize;//数据条数
options.Start = pageIndex;//开始项

Solr 实现的更多相关文章

  1. solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件

    昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...

  2. Solr 排除查询

    前言 solr排除查询也就是我们在数据库和程序中经常处理的不等于,solr的语法是在定语前加[-].. StringBuilder sbHtml=new StringBuilder(); shBhtm ...

  3. Solr高级查询Facet

    一.什么是facet solr种以导航为目的的查询结果成为facet,在用户查询的结果上根据分类增加了count信息,然后用户根据count信息做进一步搜索. facet主要用于导航实现渐进式精确搜索 ...

  4. [Solr] (源) Solr与MongoDB集成,实时增量索引

    一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中,直接向Solr服务发送请求,返回xml.js ...

  5. sorl6.0+jetty+mysql搭建solr服务

    1.下载solr 官网:http://lucene.apache.org/solr/ 2.目录结构如下 3.启动solr(默认使用jetty部署) 在path路径下将 bin文件夹对应的目录加入,然后 ...

  6. Solr Facet 默认值

    前言 今天在用Solr Facet遇到了默认值的问题,我用Facet.field查询发现数据总共100条,刚开始没有注意,发现少个别数据,但是用这几个个别的id查询又能查出来数据.才发现是Facet默 ...

  7. solr添加多个core

    在D:\solr\solr_web\solrhome文件夹下: 1)创建core0文件夹 2)复制D:\solr\solr_web\solrhome\configsets\basic_configs/ ...

  8. solr定时更新索引遇到的问题(SolrDataImportProperties Error loading DataImportScheduler properties java.lang.NullPointerException)

    问题描述 报如下错误,很显然,问题原因:空指针异常: ERROR (localhost-startStop-1) [   ] o.a.s.h.d.s.SolrDataImportProperties ...

  9. Solr实战:使用Hue+Solr实现标签查询

    公司最近在研究多条件组合查询方案,Google的一位技术专家Sam和我们讨论了几个备选方案. Sam的信: 我做了进一步研究,目前有这么几种做法: 1) 最直接粗暴,只做一个主index,比如按行业+ ...

  10. solr.net的使用

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

随机推荐

  1. ThinkPHP的增、删、改、查

    一.创建操作 在ThinkPHP使用add方法新增数据到数据库. 使用方法如下: $User = M()->; $data[););')->delete();

  2. 动态链接库(dll)简介(转)

    DLL 是 Dynamic Link Library 的缩写,译为“动态链接库”.DLL也是一个被编译过的二进制程序,可以被其他程序调用,但与 exe 不同,DLL不能独立运行,必须由其他程序调用载入 ...

  3. Codeforces Round #313 (Div. 2) C. Gerald's Hexagon 数学

    C. Gerald's Hexagon Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/559/pr ...

  4. loj 1063(求割点个数)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26780 思路:判断一个点是否是割点的两个条件:1.如果一个点v是根 ...

  5. WebScarab使用说明

    安装说明:软件是基于java开发的,所以安装前,要求你的机器已经安装了Java运行环境     软件说明:一个用来分析使用HTTP和HTTPS协议的应用程序框架,可以用来学习HTTP协议我更多的是用来 ...

  6. Servlet常见错误及解决方法

    常见错误及解决方法 1. 404产生的原因为Web服务器(容器)根据请求地址找不到对应资源,以下情况都会出现404的错误提示: 输入的地址有误(应用名大小写不正确,名称拼写不正确) 在web.xml文 ...

  7. 枚举GC Roots的实现

    枚举根节点 从可达性分析中从GC Roots节点找引用链这个操作为例,可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,现在很多应用仅仅方 ...

  8. MBR 基础

    1.简介 MBR,全称为Master Boot Record,即硬盘的主引导记录,它位于整个硬盘的0磁道0柱面1扇区,其主要对硬盘进行了组织,是在驱动器最前端的一段引导扇区. MBR是不属于任何一个操 ...

  9. reqSUB错误

    ---- ERROR ----    Error in dispatcher subroutine reqSUB: Invalid PAR(1): 0502 上面是用adams/ca加载一个汽车模型时 ...

  10. BZOJ2102 : [Usaco2010 Dec]The Trough Game

    暴力枚举答案然后检验. #include<cstdio> int n,m,i,j,k,a[100],b[100],cnt,ans;char s[20]; int main(){ for(s ...