在本文中,我们讨论 docs_id
选项,该选项提供了对 CALL PQ
结果集的更简单的操作。
让我们考虑以下 PQ 批量调用:
mysql> CALL PQ ('pq', ('{"title":"butter is good as", "id":3}',
'{"title":"was butter","id":4}',
'{"title":"sas was butter","id":5}',
'{"title":"bas was butter", "id":6}',
'{"title":"butter is good as","id":7}'),
1 as docs_json ,1 as docs,1 as query);
+------+-----------+------------+------+---------+
| UID | Documents | Query | Tags | Filters |
+------+-----------+------------+------+---------+
| 1 | 1,5 | butter is | | |
| 2 | 2,3,4 | butter was | | |
+------+-----------+------------+------+---------+
2 rows in set (0.00 sec)
这个输出有什么问题?
我们收到的是查询与输入数组中文档位置之间的配对列表,然而我们的文档有一个标识符 - id 属性。
如果我们想将结果传递给下一个过程,我们需要进行后处理工作,以使用位置从输入数组中提取文档 ids。
为了避免在 2.7.0 中进行此后处理,我们添加了一个名为 docs_id 的新选项,该选项允许用文档属性的值替换文档位置。
mysql> CALL PQ ('pq', ('{"title":"butter is good as", "id":3}',
'{"title":"was butter","id":4}',
'{"title":"sas was butter","id":5}',
'{"title":"bas was butter", "id":6}',
'{"title":"butter is good as","id":7}'),
1 as docs_json ,1 as docs,1 as query, 'id' as docs_id);
+------+-----------+------------+------+---------+
| UID | Documents | Query | Tags | Filters |
+------+-----------+------------+------+---------+
| 1 | 3,7 | butter is | | |
| 2 | 4,5,6 | butter was | | |
+------+-----------+------------+------+---------+
2 rows in set (0.01 sec)
现在我们在 PQ 结果集中有了文档 ids(或其他选择的标识)。
所选的 docs_id
属性必须是整数属性。它的值不一定需要是唯一的。例如,查询可以按另一个整数属性进行逻辑分组。如果我们想找出符合条件的组,我们可以使用该属性代替文档 id:
mysql> CALL PQ ('pq', ('{"title":"butter is good as", "id":3,"gid":10}',
'{"title":"was butter","id":4,"gid":20}',
'{"title":"sas was butter","id":5,"gid":10}',
'{"title":"bas was butter", "id":6,"gid":20}',
'{"title":"butter is good as","id":7,"gid":10}'),
1 as docs_json ,1 as docs,1 as query, 'gid' as docs_id);
+------+-----------+------------+------+---------+
| UID | Documents | Query | Tags | Filters |
+------+-----------+------------+------+---------+
| 1 | 10 | butter is | | |
| 2 | 10,20 | butter was | | |
+------+-----------+------------+------+---------+
2 rows in set (0.00 sec)