在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
任何想法如何阻止在宏中搜索或從高亮顯示的內容中排除它們?
嗨盧西奧,謝謝。我想知道如何製作高亮過程。如果你能給我一個真實的例子嗎?! –