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()[].ToList()[];
item.Title = t;
}

三、 SolrNet分页

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

@model PagedList<BookModel>

添加分页标签:

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

实现分页参数传递:

int totalCount = , pageSize=;
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分页与高亮(使用SolrNet实现)的更多相关文章

  1. Solr学习总结(六)SolrNet的高级用法(复杂查询,分页,高亮,Facet查询)

    上一篇,讲到了SolrNet的基本用法及CURD,这个算是SolrNet 的入门知识介绍吧,昨天写完之后,有朋友评论说,这些感觉都被写烂了.没错,这些基本的用法,在网上百度,资料肯定一大堆,有一些写的 ...

  2. 电商项目搜寻功能(分页,高亮,solr,规格过滤,价格的排序)

    package cn.wangju.core.service; import cn.wangju.core.pojo.item.Item; import cn.wangju.core.util.Con ...

  3. 8.1Solr API使用(分页,高亮)

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ 一.Solr Deep Paging(深分页) 长期以来,我们一直有一个深分页问题.如果直接跳到很靠后的页数, ...

  4. Lucene的多域查询、结果中查询、查询结果分页、高亮查询结果和结果评分

    1.针对多个域的一次性查询 1.1.三种方案     使用lucene构造搜索引擎的时候,如果要针对多个域进行一次性查询,一般来说有三种方法:     第一种实现方法是创建多值的全包含域的文本进行索引 ...

  5. solr特点一:高亮(highlighting)

    高亮的配置 参数详细说明: hl.fl: 用空格或逗号隔开的字段列表.要启用某个字段的highlight功能,就得保证该字段在schema中是stored.如果该参数未被给出,那么就会高亮默认字段 s ...

  6. 在Lucene或Solr中实现高亮的策略

    一:功能背景 近期要做个高亮的搜索需求,曾经也搞过.所以没啥难度.仅仅只是原来用的是Lucene,如今要换成Solr而已,在Lucene4.x的时候,散仙在曾经的文章中也分析过怎样在搜索的时候实现高亮 ...

  7. Solr 实现

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

  8. Solr系列六:solr搜索详解优化查询结果(分面搜索、搜索结果高亮、查询建议、折叠展开结果、结果分组、其他搜索特性介绍)

    一.分面搜索 1. 什么是分面搜索? 分面搜索:在搜索结果的基础上进行按指定维度的统计,以展示搜索结果的另一面信息.类似于SQL语句的group by 分面搜索的示例: http://localhos ...

  9. Java操作Solr之SolrJ

    添加SolrJ的jar包 solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务, <depende ...

随机推荐

  1. 贪心 Codeforces Round #301 (Div. 2) B. School Marks

    题目传送门 /* 贪心:首先要注意,y是中位数的要求:先把其他的都设置为1,那么最多有(n-1)/2个比y小的,cnt记录比y小的个数 num1是输出的1的个数,numy是除此之外的数都为y,此时的n ...

  2. UVa10917 A Walk Through the Forest(SPFA+记忆化搜索)

    题目给一张有向图,问从起点1到终点2沿着合法的路走有种走法,合法的路指从u到v的路,v到终点的距离严格小于u到终点的距离. 先SPFA预处理出所有合法的路,然后这些路肯定形成一个DAG,然后DP一下就 ...

  3. FZU2218 Simple String Problem(状压DP)

    首先,定义S,表示前k个字符出现的集合,用二进制来压缩. 接下来,推出dp1[S],表示集合为S的子串的最长长度. 然后根据dp1[S]再推出dp2[S],表示集合为S或S的子集的子串的最长长度. 最 ...

  4. 剪花布条[HDU2087]

    剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  5. TYVJ P1094 矩形分割 标签:DP

    做题记录:2016-08-12 21:42:21 背景 YHOI Train#4 Problem 1 描述 出于某些方面的需求,我们要把一块N×M的木板切成一个个1×1的小方块.对于一块木板,我们只能 ...

  6. jQuery 写的幻灯左右切换插件

    <html> <head> <meta charset="utf-8"> <title>官网</title> <s ...

  7. hdu-acm steps Max sum

    /*求最大字段和,d[i]表示已 i 结尾(字段和中包含 i )在 a[1..i] 上的最大和,d[i]=(d[i-1]+a[i]>a[i])?d[i-1]+a[i]:a[i];max = {d ...

  8. 浅谈WPF页间导航

    浅谈WPF页间导航 使用导航的目的是从一个页面进入到另一个页面.无论是预先决定的线性顺序(向导)还是基于层次的用户驱动程序(大部分网站的形式),或者动态生成的路径,主要有3种方法实现:调用Naviga ...

  9. HDU 1078 FatMouse and Cheese(记忆化搜索)

    FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  10. 【转】jsonp详解

    原文地址:http://www.cnblogs.com/yuzhongwusan/archive/2012/12/11/2812849.html json相信大家都用的多,jsonp我就一直没有机会用 ...