我可以 return 在 FTS 匹配后记录数据吗?

Can I return document data after a FTS match?

假设我有这个数据:

{
   "test": "Testing1234" 
   "false": "Falsify"
}

然后使用 curl,我编写了这个查询:

{"explain": true, "fields": [ "*" ], "highlight": {}, "query": { "query": "Testing"}}

我收到了 Couchbase 的回复。这包括文档 ID,以及一个 locations 对象,该对象 return 详细说明了我的查询在文档中匹配文本的位置,包括父对象。所有有用的信息。

但是,我没有收到任何额外的上下文。例如,假设我有 100 个带有 "test": "TestingXXXX" 的文档,其中 XXXX 是一个随机字符串。我的搜索不会为我提供 XXXX。它也没有提供任何方式来读取同一对象中的其他字段(例如,如果我想获取 "false" 属性)。我将简单地获取 100 个不同的文档 ID 进行查询。因此,从技术上讲,它足以获取所有需要的信息,但是它导致我根据来自原始响应的解析信息发出 100 个不同的请求。

在使用 REST API 时,有什么方法可以 return 上下文与 FTS 匹配,而无需简单地查询每个匹配的文档?

我想通了。这不是查询的问题。这些字段没有被索引。为了修复,我将索引设置 "Store Dynamic Fields" 更改为 "True"。也就是说,突出显示 return 提供了很多额外的细节,而且我相信它也会大大增加查询时间。 couchbase 文档似乎暗示它仅用于调试。因此,如果有人有进一步的建议,我想保持开放状态。

您可以使用 CURL() 函数从 N1QL 中发出 FTS 查询,然后将其与对象本身连接起来,从而获得完整的对象。

https://developer.couchbase.com/documentation/server/current/n1ql/n1ql-language-reference/curl.html

您的查询大致为以下形式:

SELECT * 
FROM yourTable
USE KEYS CURL(ftsURL, ftsQuery, ...)

您需要将 CURL 函数包装在一些转换函数中,以将 FTS 结果转换为 ID 数组。

我意识到这只是示意性的,因为我手边没有完整的示例。但是通过这些步骤来完成:

  1. 在 N1QL 中通过 CURL() 发出 FTS 查询。
  2. 将 FTS 结果转换为 ID 数组。
  3. 使用 USE KEYS 将对 id 数组的请求嵌入到 SELECT 查询中。