0
每次我調用方法時,index()方法都會覆蓋該字段。例如,我想在keywordHash字段中添加「1」,「2」,「3」。但是在我調用index()方法之後,只會保存「3」。如何將所有數據添加到字段而不是覆蓋它?在GetView()方法中,我稱之爲Index()方法。如何在Lucene.Net中的現有字段中添加數據
public virtual string GetView(TokenStream tokenStream, out int numberOfTokens, string filePath, string encryptedPath, string password, string fileName)
{
StringBuilder sb = new StringBuilder();
Token token = tokenStream.Next();
numberOfTokens = 0;
FileEncryption fileEnc = new FileEncryption();
while (token != null)
{
numberOfTokens++;
sb.Append("[" + token.TermText() + " = " + GetTokenView(token) + "]" + System.Environment.NewLine);
fileEnc.Index(GetTokenView(token), filePath, encryptedPath, password, fileName);
token = tokenStream.Next();
}
return sb.ToString();
}
public void Index(string strHash, string filePath, string encryptedPath, string password, string fileName)
{
string indexFileLocation = @"C:\Index";
Lucene.Net.Store.Directory dir =
Lucene.Net.Store.FSDirectory.GetDirectory(indexFileLocation, true);
//create an analyzer to process the text
Lucene.Net.Analysis.Analyzer analyzer = new
Lucene.Net.Analysis.Standard.StandardAnalyzer();
//create the index writer with the directory and analyzer defined.
Lucene.Net.Index.IndexWriter indexWriter = new
Lucene.Net.Index.IndexWriter(dir, analyzer,
/*true to create a new index*/ true);
//create a document, add in a single field
Lucene.Net.Documents.Document doc = new
Lucene.Net.Documents.Document();
doc.Add(new Field("keywordHash", strHash, Field.Store.YES, Field.Index.TOKENIZED));
doc.Add(new Field("keywordPath", filePath, Field.Store.YES, Field.Index.NO));
doc.Add(new Field("keywordEncPath", encryptedPath, Field.Store.YES, Field.Index.NO));
doc.Add(new Field("keywordPassword", password, Field.Store.YES, Field.Index.TOKENIZED));
//doc.Add(new Field("keywordEncryptedFile", encryptedFile, Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("keywordFileName", fileName, Field.Store.YES, Field.Index.NO));
//write the document to the index
indexWriter.AddDocument(doc);
//optimize and close the writer
indexWriter.Optimize();
indexWriter.Close();
}
public void LuceneSearch()
{
HashAlg hashAlg = new HashAlg();
string keywordLower = tbSearchEnc.Text.ToLower();
string keywordHash;
if(rbMD5Search.Checked == true)
{
keywordHash = hashAlg.GenerateHashMD5(keywordLower);
}
else
{
keywordHash = hashAlg.GenerateHashSHA1(keywordLower);
}
string indexFileLocation = @"C:\Index";
Lucene.Net.Store.Directory dir = Lucene.Net.Store.FSDirectory.GetDirectory(indexFileLocation, false);
Lucene.Net.Search.IndexSearcher searcher = new Lucene.Net.Search.IndexSearcher(indexFileLocation);
//create an index searcher that will perform the search
//Lucene.Net.Search.IndexSearcher searcher = new Lucene.Net.Search.IndexSearcher(dir);
//build a query object
Lucene.Net.Index.Term searchTerm = new Lucene.Net.Index.Term("keywordHash", keywordHash);
Lucene.Net.Search.Query query = new Lucene.Net.Search.TermQuery(searchTerm);
//execute the query
Lucene.Net.Search.Hits hits = searcher.Search(query);
//iterate over the results.
for (int i = 0; i < hits.Length(); i++)
{
Document doc = hits.Doc(i);
string hashValue = doc.Get("keywordHash");
string path = doc.Get("keywordPath");
string encPath = doc.Get("keywordEncPath");
string fileName = doc.Get("keywordFileName");
listBoxSearch.Items.Add(encPath);
Console.WriteLine(hashValue + " " + path + " " + encPath + " " + fileName);
}
}
實際上這個代碼已經過時了,我搜索一種方法來替換這裏的「next」:http://stackoverflow.com/q/22907008/185593 – serhio