搜索分布式路由表
应用程序必须先创建搜索查询,然后应用程序才能搜索分布式路由表 (DRT) 。 调用 DrtStartSearch 函数时,应用程序会指定所需的键值。 搜索行为由 应用程序在DRT_SEARCH_INFO 结构中指定的信息决定。
通常,当搜索发现结果时,将发出应用程序事件信号,并在搜索结束时发出另一个应用程序事件信号。 但是,如果在 DRT_SEARCH_INFO 中设置了 fIterative,则可以在与沿途的每个节点进行接触时发出应用程序事件的信号。
发出事件信号后,应用程序随后调用 DrtGetSearchResult 函数以获取结果。 如果返回的代码 S_OK,则 API 返回 的 DRT_SEARCH_RESULT 结构中将结果指向 。 返回的结果属于 DRT_SEARCH_INFO 中指定的值范围。 如果搜索未找到匹配项,则结果返回结束时将仅返回 DRT_E_NO_MORE 值。
以下信息详细说明 了 DRT_SEARCH_INFO 中包含的成员如何允许应用程序专门规定 DRT 基础结构的搜索行为:
fAllowCurrentInstanceMatch
默认情况下,DRT 搜索结果仅包含在本地节点外部找到的匹配项。 设置 fAllowCurrentInstanceMatch 指定搜索结果还包括在本地 DRT 实例中找到的匹配项。
cMaxEndpoints
搜索返回的结果的数量和范围由应用程序使用 cMaxEndpoints (数量) 指定, pMinimumKey 和 pMaximumKey (范围) 值,并由 DRT_SEARCH_INFO引用。
当 cMaxEndpoints = 1 时,DRT 基础结构会搜索一个键,并在DRT_SEARCH_INFO中返回 pMinimumKey 和 pMaximumKey 值指定的范围内的一个匹配项。 此匹配可以是完全匹配项,也可以是范围内最近的匹配项。 如果未找到匹配项,则返回 DRT_E_NO_MORE 。
如果 cMaxEndpoints > 1,DRT 基础结构将返回 cMaxEndpoints 值范围内的匹配项。 返回的匹配项可以包含完全匹配或范围内最近的匹配结果。 此外,如果 pMinimumKey 和 pMaximumKey 设置为相同的值,则仅对该值执行搜索,如果未找到该值,则返回 DRT_E_NO_MORE 。
fAnyMatchInRange
fAnyMatchInRange 成员指示搜索是在指定范围内第一个匹配项位于指定范围内后停止的,还是继续搜索与 DrtStartSearch API 中指定的键最接近的匹配项。 设置 fAnyMatchInRange 后,无论DRT_SEARCH_INFO中cMaxEndpoints 的指定值如何,搜索都会以 cMaxEndpoints = 1 执行。
fIterative
fIterative 成员指定在搜索期间由 DRT 基础结构联系的每个节点是否具有与之关联的密钥/终结点数据,以便通过DRT_SEARCH_RESULT提供给应用程序。 通过将 fIterative 设置为 TRUE,将强制 cMaxEndpoints = 1 的值。 如果在 DRT 的搜索查询中将 fIterative 设置为 TRUE ,则会在与每个节点或“跃点”联系后回调应用程序。每个跃点结果都包含一个键,指示 DRT 接下来将搜索哪个节点。 跃点结果通过 DrtGetSearchResult 作为 DRT_MATCH_INTERMEDIATE 结果返回。
pMinimumKey 和 pMaximumKey
pMinimumKey 和 pMaximumKey 成员可用于搜索某个范围内的键。 如果 fAnyMatchInRange 成员设置为 FALSE,则 DRT 将返回最接近的键 (s) 到使用 DrtStartSearch 函数中传递的 pKey 参数指定的搜索目标 () 范围内。 请注意,传递给 DrtStartSearch 的 pKey 参数必须位于 pMinimumKey 和 pMaximumKey 定义的范围内。 若要搜索精确键,请将 pMinimumKey、 pMaximumKey 和 pKey 设置为相同的值。
相关主题