刷新全文搜索索引

Dav*_*vid 2 c# full-text-search sql-server-2008

在SQL Server 2008中,当设置全文搜索时,它为我提供了一个选项,可以选择一个时间/日来重新填充索引,我可以从代码而不是像C#代码那样做吗?如果是这样我怎么办?我是否需要从C#执行SQL代码来刷新索引?

另外,如果我不重新填充索引并添加一些新记录,通过使用FTS查询,新记录是否还会出现?但慢一点?或者除非重新索引,否则他们会不会出现?

mjv*_*mjv 6

编辑:请注意,有两种方法可以保持FT索引的最新状态:

  • 要"更新"它需要跟踪单个记录的更改(这是自动完成的,给定正确的"更改跟踪"设置,但这确实会产生轻微的开销).
  • "重新开发"它,即重新创建完整的索引.

前一种方法对于基础目录用户的持续服务是+/-透明的,后者意味着在重新填充索引时部分丢失服务(尽管可能不是在2008年?)

有点不清楚问题涉及什么类型的更新或重新填充,因此下面的响应是通用的.

1)是的!可以使用简单的TSQL查询以编程方式完成全文索引重新填充(或更新),如下所示.可以使用OLEDB甚至ODBC从C#代码调用此类查询.

ALTER FULLTEXT INDEX ON myCatalog START FULL POPULATION;    -- for full (re-)population
ALTER FULLTEXT INDEX ON myCatalog START UPDATE POPULATION;    -- for update
Run Code Online (Sandbox Code Playgroud)

2)是的,FTS的指数将反映对数据库的更改,在接近实时的,只要它是相应的设置.
您需要为"更改跟踪"设置FT索引,以便能够保持索引当前.这是必要条件.使用已更改的记录和已记录的新记录(来自更改跟踪),SQL可以"动态"更新FT索引(保持此索引略微落后于实时重新对数据库的更新;延迟是因为更新到FT索引有点缓冲,也因为这种类型的更新通常是关于服务器上CPU使用率的低优先级,或者这可以"手动"完成(手动是在引号中,因为"明确"可能更多适当的,对于这样的手动更新可能会被安排,因此"自动"发生.)

有关详细信息,请参阅此Microsoft technet文章.(另请查看本文底部的链接,了解FT索引的概述等)