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


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

 

代碼下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM