私は現在、lucene.netを使用してキーワード検索のためにファイルの内容を検索しています。結果を正しく得ることができましたが、特定のファイルにあるキーワードを表示する必要があるシナリオがあります。ファイルコンテンツの検索にlucene.netを使用するにはどうすればよいですか?
「karthik
」と「steven
」という2つの異なるファイルがあり、「karthik and steven
」を検索すると、両方のファイルが表示されます。 「karthik
」と「steven
」のみを個別に検索すると、それぞれのファイルのみが表示されます。
"karthik and steven
"を同時に検索すると、ファイル名だけが表示されているので、結果として両方のファイルが取得されます。その特定のファイルにある特定のキーワードをlistviewのレコードとして表示する必要があります。上記
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;
}
私は、今私は、それぞれの文書で見つかった特定のキーワードをタグ付けしてrecordsssとしてリストビューに表示する必要があり、検索と私はリストビューに結合していたXMLのためにsimlar使用していたコードです実測下記リストビュー
なしファイル名、キーワード(複数可)
1 TEST.DOCのカルティク
2 Test2.Docスティーブン
私はあなたの質問を望ましくないことを願っています。
コードください! atleastスニペット! –
Highlighter.Netを試してください。結果を強調表示したり、ソースを調べたりするのに使用できます。 –
私は上記のコードスニペットで質問を修正しました。 – karthikdavanam