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;//開始項