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

时间:2018-06-25 20:11:34

标签: couchbase n1ql

假设我有此数据:

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

然后使用curl编写此查询:

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

我从长沙发基地得到了回应。这包括文档ID,以及一个locations对象,该对象返回有关我的查询在文档中匹配文本位置的详细信息,包括父对象。所有有用的信息。

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

使用REST API时,是否有任何方法可以返回与FTS匹配的上下文,而不必简​​单地查询每个匹配的文档?

2 个答案:

答案 0 :(得分:1)

您可以通过使用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密钥将对ID数组的请求嵌入到SELECT查询中。

答案 1 :(得分:0)

我知道了。查询不是问题。该字段没有被索引。要修复,我将索引设置“存储动态字段”更改为“真”。也就是说,突出显示确实返回了很多额外的细节,而且我敢肯定,这也会大大增加查询时间。该couchbase文档似乎暗示它仅用于调试。因此,在有人提出进一步建议的情况下,我谨此公开。