我将 dtSearch 与 SQL 数据库结合使用,并希望维护一个包含所有 DocId 及其相关文件名的表。从那里,我将添加一个带有外键的列,以允许我结合文本和数据库搜索。
我有代码可以简单地返回索引中的所有记录并将它们一一添加到数据库中。然而,这需要永远,并且没有解决如何在将新记录添加到索引时简单地追加新记录的问题。但以防万一它有帮助:
MyDatabaseContext db = new StateScapeEntities();
IndexJob ij = new dtSearch.Engine.IndexJob();
ij.IndexPath = @"d:\myindex";
IndexInfo indexInfo = dtSearch.Engine.IndexJob.GetIndexInfo(@"d:\myindex");
bool jobDone = ij.Execute();
SearchResults sr = new SearchResults();
uint n = indexInfo.DocCount;
for (int i = 1; i <= n; i++)
{
sr.AddDoc(ij.IndexPath, i, null);
}
for (int i = 1; i <= n; i++)
{
sr.GetNthDoc(i - 1);
//IndexDocument is defined elsewhere
IndexDocument id = new IndexDocument();
id.DocId = sr.CurrentItem.DocId;
id.FilePath = sr.CurrentItem.Filename;
if (id.FilePath != null)
{
db.IndexDocuments.Add(id);
db.SaveChanges();
}
}
最佳答案
要将 DocId 保留在索引中,您必须在 IndexJob 中使用标志 dtsIndexKeepExistingDocIds
当 DocID 更改时,您还可以查看 dtSearch Text Retrieval Engine Programmer's Reference
关于sql-server - 在 SQL 数据库中从 dtSearch 记录所有 DocIds 和 FileNames 的最快方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32344084/