Solr分頁與高亮(使用SolrNet實現)

石曼迪發表於2014-12-08

Solr分頁與高亮(使用SolrNet實現)

本節我們使用Asp.net MVC實現Solr客戶端查詢,建議使用SolrNet這個客戶端,開源地址在:https://github.com/mausch/SolrNet

推薦的理由主要有:

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

2. 社群活躍,使用者眾多,有問題可以得到及時解決;

3. 最主要:使用方便。

下載後最好先編譯幾個DLL:SolrNet.DSL.dll  SolrNet.dll   HttpWebAdapters.dll

然後開啟SampleSolrApp執行即可看到效果。由於本身自帶的示例程式碼較繁瑣,我們從簡實現。

wps8778.tmp

wps8789.tmp

一、實現簡單搜尋功能:

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

 

程式碼下載

相關文章