gpt4 book ai didi

sql-server - 在 SQL 数据库中从 dtSearch 记录所有 DocId 和文件名的最快方法

转载 作者:行者123 更新时间:2023-12-04 02:13:33 25 4
gpt4 key购买 nike

我正在将 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

  • 当文档被添加到索引时,它会被分配一个 DocId,并且 DocId 总是按顺序编号。

  • 重新索引文档时,旧的 DocId 将被取消并分配一个新的 DocId。

  • 压缩索引时,索引中的所有 DocId 都会重新编号以删除已取消的 DocId,除非在 IndexJob 中设置了 dtsIndexKeepExistingDocIds 标志。

  • 当一个索引被合并到另一个索引中时,目标索引中的 DocId 永远不会改变。合并到目标索引中的文档都将被分配新的、按顺序编号的 DocId,除非 (a) 在 IndexJob 中设置了 dtsIndexKeepExistingDocIds 标志,并且 (b) 索引具有不重叠的文档 ID 范围。

    <

关于sql-server - 在 SQL 数据库中从 dtSearch 记录所有 DocId 和文件名的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32344084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com