2012-03-20 28 views
1

的搜索結果Higlight話我有其使用的solr作爲搜索引擎,並顯示在數據網格ASP.Net網站的搜索結果的應用程序。現在我需要在數據網格中部分或全部突出顯示「搜索到的單詞」。Solr中

就像讓我們說我正在尋找「加利福尼亞州」然後我需要在加利福尼亞州的任何地方發現任何地方的高字號。

如果我有一些ID,如 'CA 0012 *' 然後,我需要強調CA,加利福尼亞州,0012 * ..和CA 0012也。

我想寫這個邏輯在C#4

在此先感謝... :)

回答

2

您需要的熒光筆:http://wiki.apache.org/solr/HighlightingParameters

以下是該文件

一些相關的提取物

HL

設置爲 「true」 使突出的片段......

hl.fl

領域要爲其生成強調片段

HL的逗號或與空間分隔的列表。 simple.pre/hl.simple.post

這之前和亮詞語後顯示的文本...

的默認值是 「< EM>」 和 「</em>的」


您可能需要Solr的同義詞或客戶端邏輯,以確定CACalifornia。您還需要爲Solr提供.Net綁定; SolrNet經常在這裏討論。

+1

設置'hl.fragsize = 0'以便返回整個值也是一個好主意 - 這樣您就可以使用突出顯示的值代替原始值。 – 2012-03-20 17:27:25

+1

請參閱 - http://code.google.com/p/solrnet/wiki/Highlighting瞭解如何使用SolrNet cleint使用突出顯示。 SolrNet客戶端附帶的SampleApp也顯示了使用突出顯示的示例。 – 2012-03-21 00:13:34

0

我寫了類似的邏輯,在Java腳本我Telerik的層次結構網格。

首先我加載找到的記錄到網格(搜索服務器端)

然後我用下面的jQuery突出找到行。

的主要邏輯是創建一個動態SPAN周圍找到的文本,並給它一個CSS類,顯示其突出的變化的背景(或任何你想要的其他東西)。

以下是jQuery的

jQuery.fn.highlight = function(pat) 
{ 
function innerHighlight(node, pat) 
{ 
    var skip = 0; 
    if (node.nodeType == 3) 
    { 
     var pos = node.data.toUpperCase().indexOf(pat); 
     if (pos >= 0) 
     { 
     var spannode = document.createElement('span'); 
     spannode.className = 'highlight'; 
     var middlebit = node.splitText(pos); 
     var endbit = middlebit.splitText(pat.length); 
     var middleclone = middlebit.cloneNode(true); 
     spannode.appendChild(middleclone); 
     middlebit.parentNode.replaceChild(spannode, middlebit); 
     skip = 1; 
    } 
    } 
    else if (node.nodeType == 1 && node.childNodes && !/(script|style) /i.test(node.tagName)) { 
    for (var i = 0; i < node.childNodes.length; ++i) { 
    i += innerHighlight(node.childNodes[i], pat); 
    } 
    } 
    return skip; 
} 
return this.each(function() 
{ 
    innerHighlight(this, pat.toUpperCase()); 
}); 
}; 

如果你想獲得其中包含您發現文中的所有行,你可以使用下面的jQuery

allrows = $.map("tr.rbi:contains('California')") 

當然,你必須寫一些邏輯你自己去加利福尼亞州的加利福尼亞州。