[英]How do I use lucene.net for searching file content?
我目前正在使用lucene.net來搜索文件內容以進行關鍵字搜索。 我能夠正確獲得結果,但是有一種情況需要顯示在特定文件中找到的關鍵字。
有兩個不同的文件,分別包含“ karthik
”和“ steven
”,如果我搜索“ karthik and steven
”,則能夠同時顯示兩個文件。 如果我僅分別搜索“ karthik
”和“ steven
”,則僅顯示相應的文件。
當我同時搜索“ karthik and steven
”時,由於我僅顯示文件名,因此在結果中同時得到兩個文件,現在我需要在該特定文件中顯示的特定關鍵字作為列表視圖中的記錄顯示。
Public bool StartSearch()
{
bool bResult = false;
Searcher objSearcher = new IndexSearcher(mstrIndexLocation);
Analyzer objAnalyzer = new StandardAnalyzer();
try
{
//Perform Search
DateTime dteStart = DateTime.Now;
Query objQuery = QueryParser.Parse(mstrSearchFor, "contents", objAnalyzer);
Hits objHits = objSearcher.Search(objQuery, objFilter);
DateTime dteEnd = DateTime.Now;
mlngTotalTime = (Date.GetTime(dteEnd) - Date.GetTime(dteStart));
mlngNumHitsFound = objHits.Length();
//GeneratePreviewText(objQuery, mstrSearchFor,objHits);
//Generate results - convert to XML
mstrResultsXML = "";
if (mlngNumHitsFound > 0)
{
mstrResultsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><Results>";
//Loop through results
for (int i = 0; i < objHits.Length(); i++)
{
try
{
//Get the next result
Document objDocument = objHits.Doc(i);
//Extract the data
string strPath = objDocument.Get("path");
string strFileName = objDocument.Get("name");
if (strPath == null) { strPath = ""; }
string strLastWrite = objDocument.Get("last_write_time");
if (strLastWrite == null)
strLastWrite = "unavailable";
else
{
strLastWrite = DateField.StringToDate(strLastWrite).ToShortDateString();
}
double dblScore = objHits.Score(i) * 100;
string strScore = String.Format("{0:00.00}", dblScore);
//Add results as an XML row
mstrResultsXML += "<Row>";
//mstrResultsXML += "<Sequence>" + (i + 1).ToString() + "</Sequence>";
mstrResultsXML += "<Path>" + strPath + "</Path>";
mstrResultsXML += "<FileName>" + strFileName + "</FileName>";
//mstrResultsXML += "<Score>" + strScore + "%" + "</Score>";
mstrResultsXML += "</Row>";
}
catch
{
break;
}
}
//Finish off XML
mstrResultsXML += "</Results>";
//Build Dataview (to bind to datagrid
DataSet objDS = new DataSet();
StringReader objSR = new StringReader(mstrResultsXML);
objDS.ReadXml(objSR);
objSR = null;
mobjResultsDataView = new DataView();
mobjResultsDataView = objDS.Tables[0].DefaultView;
}
//Finish up
objSearcher.Close();
bResult = true;
}
catch (Exception e)
{
mstrError = "Exception: " + e.Message;
}
finally
{
objSearcher = null;
objAnalyzer = null;
}
return bResult;
}
上面是我用於搜索的代碼和我綁定到listview的xml,現在我需要標記在相應文檔中找到的特定關鍵字,並將其作為記錄顯示在listview中,類似於下面的listview
找不到文件名關鍵字
1個Test.Doc karthik
2 Test2.Doc史蒂文
我希望你們能理解這個問題,
這取決於您的文檔如何編制索引。 您需要提取原始內容,將其通過分析器以獲取索引的標記,然后檢查與生成的查詢匹配的內容。
只需使用contrib的Highlighter.Net軟件包即可,它可以完成更多任務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.