在本文中,我们讨论如何在 Percolate 查询中使用无模式文档。
Percolate 查询功能不仅允许存储全文匹配,还允许常规属性过滤。
在 2.7.0 之前,这仅限于单个数值属性条件。
现在过滤可以与 字符串 和 JSON 属性一起工作。JSON 过滤很有趣,因为您可以针对存储的查询测试无模式文档。过滤现在还支持多个属性过滤和 表达式 的使用,这允许更复杂的存储标准。
mysql> insert into pq (query,filters) values('orange', 'j.price - 1 > 3');
mysql> insert into pq (query,filters) values('orange', 'j.price - 1 > 3 OR j.tag IS NOT null');
mysql> insert into pq (query,filters) values('orange', 'j.price - 1 > 3 OR any (x=\'test\' for x in j.tag)');
mysql> CALL PQ ('pq', ('{"title":"orange","id":10, "j":{ "price":5 } }',
'{"title":"orange","id":11, "j":{ "price":3 } }',
'{"title":"orange","id":12, "j":{ "tag":5 } }',
'{"title":"orange","id":13, "j":{ "tag":["test"] } }' ),
1 as docs, 1 as docs_json, 1 as query , 'id' as docs_id);
+------+-----------+--------+------+---------------------------------------------------+
| UID | Documents | Query | Tags | Filters |
+------+-----------+--------+------+---------------------------------------------------+
| 4 | 10 | orange | | j.price - 1 > 3 |
| 5 | 10,12,13 | orange | | j.price - 1 > 3 OR j.tag IS NOT null |
| 6 | 10,13 | orange | | j.price - 1 > 3 OR any (x='test' for x in j.tag) |
+------+-----------+--------+------+---------------------------------------------------+
3 rows in set (0.00 sec)
MVA 属性支持将在 2.7.1 版本中推出。
对无模式数据的全文匹配尚不支持,我们正在考虑在未来添加此功能。目前,需要全文匹配的文本属性需要提取到单独的文本字段中。