的搜索结果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