Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: Lucene.NET
I am currently using lucene.net to search the content of files for keyword search. I am able to get the results correctly but I have a scenario where I need to display the keywords found in a particular file.
There are two different files containing "karthik" and "steven", and if I search for "karthik and steven" I am able to get both the files displayed. If I search only for "karthik" and "steven" separately, only the respective files are getting displayed.
When I search for "karthik and steven" simultaneously I get both the files in the result as I am displaying the filename alone, and now I need to display the particular keyword found in that particular file as a record in the listview.
enter code here     
 
==Code====
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;     
}
 

Above is the code i am using for search and the xml i am binding to the listview, now i need to tag the particular keywords found in the respective document and display it in the listview as recordsss,simlar to the below listview
 
No FileName KeyWord(s)Found
1 Test.Doc karthik
2 Test2.Doc steven
 
i hope u guys undesrtood the question,
Posted 29-Dec-11 2:25am
Edited 29-Dec-11 21:09pm
v2

1 solution

Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

  Permalink  
Comments
karthikkaliber at 30-Dec-11 1:57am
   
Pls read the question properly!!!!!
Member 6441668 at 19-Oct-12 2:20am
   
Hi,
 
I am bit confused, I see only index directoy, I dont see the directory to search for..
I want to specify explicitly the fodler/directory to search for.... how can i specify?

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



Advertise | Privacy | Mobile
Web02 | 2.8.1411023.1 | Last Updated 30 Dec 2011
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100