在umbraco中设置Lucene搜索引擎时,我遇到了一个问题。我试图搜索由Umbraco创建的默认索引中存储的数据。搜索的方法如下:从umbraco搜索中排除宏
private DictionaryResult GetRowContent(
Lucene.Net.Highlight.Highlighter highlighter,
Lucene.Net.Analysis.Standard.StandardAnalyzer analyzer
,Lucene.Net.Documents.Document doc1, string criteria)
{
JavaScriptSerializer jsScriptSerializer = new JavaScriptSerializer();
DictionaryResult controls = new DictionaryResult();
Lucene.Net.Analysis.TokenStream stream = analyzer.TokenStream("", new StringReader(doc1.Get("bodyContent")));
dynamic rowContentHtmlDocument = JObject.Parse(((JValue)doc1.Get("bodyContent")).ToString(CultureInfo.CurrentCulture));
foreach (dynamic section in rowContentHtmlDocument.sections)
{
foreach (var row in section.rows)
{
foreach (var area in row.areas)
{
foreach (var control in area.controls)
{
if (control != null && control.editor != null) // && control.editor.view != null)
{
JObject rowContentHtml = null;
try
{
rowContentHtml = JObject.Parse(((JContainer)control)["value"].ToString());
}
catch (Exception e)
{
}
if (rowContentHtml != null)
{
try
{
var macroParamsDictionary = JObject.Parse(((JContainer)rowContentHtml)["macroParamsDictionary"].ToString());
var documentText = macroParamsDictionary.GetValue("dokument");
if (documentText != null)
{
var document = documentText.ToString().Replace(""", "\"");
dynamic documents = jsScriptSerializer.Deserialize<dynamic>(document);
foreach (Dictionary<string, object> doc in documents)
{
if (doc.ContainsKey("FileName") && doc.ContainsKey("DocumentId"))
{
if (doc["FileName"].ToString().Length > 0 &&
doc["FileName"].ToString().ToLower().Contains(criteria.ToLower()))
{
controls.Add(new RowResult()
{
Type = 0,
Object = new Document()
{
DocumentName = doc["FileName"].ToString(),//highlighter.GetBestFragments(stream, doc["FileName"].ToString(), 1, "..."),
DocId = Guid.Parse(doc["DocumentId"].ToString())
} // StringBuilder(@"<a href=" + Url.Action("DownloadDocument", "Document", new { DocumentId = doc["DocumentId"] }) + "> " + @doc["FileName"] + "</a>").ToString()
}
);
}
}
}
}
}
catch (Exception e)
{
}
}
else
{
var text = HtmlRemoval.StripTagsRegex(((JContainer)control)["value"].ToString()).Replace("ë", "e").Replace("ç", "c");
var textResultFiltered = highlighter.GetBestFragments(stream,doc1.Get("bodyContent"), 5, "...");
controls.Add(new RowResult()
{
Type = 1,
Object = textResultFiltered
});
}
}
}
}
}
}
return controls;
}
这里我试图从简单的html内容过滤宏文件,并呈现不同。但在这部分结束
var text = HtmlRemoval.StripTagsRegex(((JContainer)control)["value"].ToString()).Replace("ë", "e").Replace("ç", "c");
var textResultFiltered = highlighter.GetBestFragments(stream,doc1.Get("bodyContent"), 5, "...");
controls.Add(new RowResult()
{
Type = 1,
Object = textResultFiltered
});
它包括搜索宏。其结果是我得到的文件属性,但HTML内容在突出显示了宏观的内容象下面这样:
6th Edition V413HAV.pdf","FileContent"... Framework 6th Edition V413HAV.pdf","... with Java 8 - 1st Edition (2015) - Copy.pdf"... 4.5 Framework 6th Edition V413HAV.pdf","... And The NET 4.5 Framework 6th Edition V413HAV.pdf" which is coming from Json data of the macro. Any idea how to exclude the macros from searching or to customize the hmtl content not to search on specific macro ? Thanks in advance.
我指的这个链接来创建Hightlighter等等 Link to Lucene example
任何想法如何阻止在宏中搜索或从高亮显示的内容中排除它们?
嗨卢西奥,谢谢。我想知道如何制作高亮过程。如果你能给我一个真实的例子吗?! –