的搜索結果Higlight話我有其使用的solr作爲搜索引擎,並顯示在數據網格ASP.Net網站的搜索結果的應用程序。現在我需要在數據網格中部分或全部突出顯示「搜索到的單詞」。Solr中
就像讓我們說我正在尋找「加利福尼亞州」然後我需要在加利福尼亞州的任何地方發現任何地方的高字號。
如果我有一些ID,如 'CA 0012 *' 然後,我需要強調CA,加利福尼亞州,0012 * ..和CA 0012也。
我想寫這個邏輯在C#4
在此先感謝... :)
的搜索結果Higlight話我有其使用的solr作爲搜索引擎,並顯示在數據網格ASP.Net網站的搜索結果的應用程序。現在我需要在數據網格中部分或全部突出顯示「搜索到的單詞」。Solr中
就像讓我們說我正在尋找「加利福尼亞州」然後我需要在加利福尼亞州的任何地方發現任何地方的高字號。
如果我有一些ID,如 'CA 0012 *' 然後,我需要強調CA,加利福尼亞州,0012 * ..和CA 0012也。
我想寫這個邏輯在C#4
在此先感謝... :)
您需要的熒光筆:http://wiki.apache.org/solr/HighlightingParameters
以下是該文件
一些相關的提取物HL
設置爲 「true」 使突出的片段......
hl.fl
領域要爲其生成強調片段
HL的逗號或與空間分隔的列表。 simple.pre/hl.simple.post
這之前和亮詞語後顯示的文本...
個的默認值是 「< EM>」 和 「</em>的」
您可能需要Solr的同義詞或客戶端邏輯,以確定CA
和California
。您還需要爲Solr提供.Net綁定; SolrNet經常在這裏討論。
我寫了類似的邏輯,在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')")
當然,你必須寫一些邏輯你自己去加利福尼亞州的加利福尼亞州。
設置'hl.fragsize = 0'以便返回整個值也是一個好主意 - 這樣您就可以使用突出顯示的值代替原始值。 – 2012-03-20 17:27:25
請參閱 - http://code.google.com/p/solrnet/wiki/Highlighting瞭解如何使用SolrNet cleint使用突出顯示。 SolrNet客戶端附帶的SampleApp也顯示了使用突出顯示的示例。 – 2012-03-21 00:13:34