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