gpt4 book ai didi

sharepoint - 如何在 Microsoft Search Server 2008 中创建用于索引重量级格式的预处理应用程序?

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

我需要为 Microsoft Search Server 2008 开发一个 IFilter,它执行长时间的计算以提取文本。从一个文件中提取文本可能需要 5 秒到 12 小时。

这样做的一个想法是 creating a preprocessing application .

我如何设计这样的应用程序?具体来说:
- 如何将 Search Server 搜寻器连接到我的应用程序?
- 提取完成后,如何将提取的文本输入搜索服务器?

最佳答案

首先,您需要对 IFilter 本身进行编码。

This article is quite good它也引用了一些好文章。
IFilter.org
另见 this set of articles

接下来是如何预处理的问题。
我能想到的最简单的方法是创建一个 FileSystemWatcher启动文档的预处理。

预处理器可以解析文档中的文本并将其存储在某处。

“某处”成为下一个问题,这主要是一种商业决策。
如果文档的目录可以添加到,我会在每个文件夹中添加一个索引目录,因为文档被解析并在其中存储一个文件,例如 [OriginalFilenameSansExtemsion]_index.txt。

如果这不可能,请在每个驱动器上创建一个索引文件夹并根据需要镜像目录结构。
归根结底,您需要的只是让 IFilter 能够根据正在编制索引的文件的文件名确定在哪里查找具有预处理内容的文本文档。

当 IFilter 运行时,调用 Init。发生这种情况时,只需加载文本文档并在调用 GetChunk、GetText 和 GetValue 函数时返回其内容。

该解决方案最终将导致预处理器和 IFilter 之间的隐式依赖关系,因为它们都将存储自己的“查找”索引文档的方式。

应该可以将索引文档的位置存储在某个共享配置位置。

更新
在 Search Server 下将如何调用 IFilter 方法?
创建后,必须将 IFilter 安装在索引服务器上(即必须注册相关的 dll)。
使用 this article作为指南,作为您实现的一部分,您将为您的过滤器提供一个唯一的 guid,用于它的 CLSID。
注册过程将与此类似,只是使用不同的扩展名和 guid。

STEP 1: COM REGISTRATION

1.Add Registry key: HKEY_CLASSES_ROOT\CLSID\ ThreadingModel : Both

STEP 2 : REGISTER IFILTER WITH OS

There are 4 steps to registering the filter-extension mapping with OS:

  1. HKEY_CLASSES_ROOT\<.ext>(Default) -->
  2. HKEY_CLASSES_ROOT\(Default) -->
  3. HKEY_CLASSES_ROOT\\PersistentHandler(Default) -->
  4. HKEY_CLASSES_ROOT\\PersistentHandler\PersistentAddinsRegistered\IID_IFilter\ (Default) -->

Now we're all set to regiter our product with WSS (Windows Sharepoint Services) or MOSS( Microsoft Office Sharepoint Server).

STEP 3: REGISTER FILTER EXTENSION WITH MOSS

  1. Add the filter-extension to the File types crawled: Start -> Program -> Microsoft Office Server -> SharePoint 3.0 Central Administration -> -> Search Settings -> File Types -> New File Type (Add extension here)

  2. Add the following registry keys:

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office Server\12.0 \Search\Applications\\Gather\Portal_Content\Extensions\ExtensionList]

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office Server\12.0\Search\Setup\Filters.ext] Default = (value not set) Extension = FileTypeBucket REG_DWORD = 0x00000001 (1) MimeTypes =

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office Server\12.0\Search\Setup\ContentIndexCommon\Filters\Extension.ext] Default REG_MULTI_SZ = IFIlter CLASSID

  3. Finally, recycle the Search Service by executing the following command from the command window:

    D:> net stop osearch

    D:> net start osearch



搜索服务器是否传递 URL 而不是本地文件名?
LoadIFilter function 是您将获得文件路径名的地方。正是在此处创建读取索引文本而不是实际文件的 IFilter 实例。

如果它为尚未编入索引的 URL 调用 IFilter::Init 该怎么办?
如果索引文件不存在,您将无法建立索引,因此返回可用的 error codes 之一。 .

如果需要很长时间,预处理应用程序将需要从文档中提取文本。在 LoadIFilter 函数(搜索应用程序传递文件的 url/文件路径)期间处理文件时,文本将需要存储在 IFilter 可以访问它的位置。使用文件的 url/filepath,Ifilter 必须能够确定先前提取的文本在哪里。
当 IFilter 可以加载文本并解析它而不是“实际”文件时。绕过了长时间搜索爬网时间的需要。

如果您不打算让预处理器处理整个站点,则需要多次通过搜索爬虫才能获得所需的内容。
假设爬虫每天晚上都在进行增量爬网。
添加文件的第一天,增量爬网会选取该文件并将其传递给 LoadIFilter。该函数查找并看不到文件的任何预处理文本,因此它将路径添加到配置文件(或列表)并返回错误代码。
该文件不会添加到搜索结果中。
预处理器,在不同的时间,查看配置列表,看到有一个文件要处理并开始工作。完成后,它会存储文本并从配置列表中删除该文件。
下次爬虫运行时,它会找到文件及其存储的文本进行解析。

这个过程开始变得有点复杂,我会担心爬虫和预处理器必须很好地通信。此外,增量爬网可能需要预处理器在提取文本后“触摸”文件。

在这一点上,最好开发一些东西,看看会发生什么,到目前为止这只是一个理论算法。

希望这是有帮助的。

关于sharepoint - 如何在 Microsoft Search Server 2008 中创建用于索引重量级格式的预处理应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/486977/

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