Couchbase FTS匹配后,我可以返回文档数据吗?

Couchbase FTS匹配后,我可以返回文档数据吗?,couchbase,n1ql,Couchbase,N1ql,假设我有以下数据: { "test": "Testing1234" "false": "Falsify" } 然后使用curl编写以下查询: {"explain": true, "fields": [ "*" ], "highlight": {}, "query": { "query": "Testing"}} 我收到couchbase的回复。这包括文档id以及一个locations对象,该对象返回有关我的查询在文档中匹配文本的位置的详细信息,包括父对象。所有有用的信息 但是,

假设我有以下数据:

{
   "test": "Testing1234" 
   "false": "Falsify"
}
然后使用curl编写以下查询:

{"explain": true, "fields": [ "*" ], "highlight": {}, "query": { "query": "Testing"}}
我收到couchbase的回复。这包括文档id以及一个
locations
对象,该对象返回有关我的查询在文档中匹配文本的位置的详细信息,包括父对象。所有有用的信息

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


在使用RESTAPI时,有没有任何方法可以返回带有FTS匹配项的上下文,而不必简单地查询每个匹配的文档?

我找到了答案。这不是查询的问题。未对字段编制索引。为了解决这个问题,我将索引设置“存储动态字段”更改为“True”。也就是说高亮显示确实返回了很多额外的细节,我相信它也会大大增加查询时间。couchbase文档似乎暗示它仅用于调试。因此,如果有人有进一步的建议,我想保留这个选项。

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

您的查询大致如下表所示:

SELECT * 
FROM yourTable
USE KEYS CURL(ftsURL, ftsQuery, ...)
您需要将CURL函数包装在一些转换函数中,以将FTS结果转换为ID数组

我意识到这是相当示意性的,因为我手头没有完整的示例。但要通过以下步骤来实现:

  • 通过N1QL中的CURL()发出FTS查询
  • 将FTS结果转换为ID数组
  • 使用USE键将对ID数组的请求嵌入到SELECT查询中
    尝试将
    includeLocations:true
    添加到查询中。这会让你知道实际的打击地点。不幸的是,我现在不能测试它。我明白了-我一定会尝试一下,然后再报告。对我来说似乎是个好办法。