⚠️ 此页面为自动翻译,翻译可能不完美。

Percolate queries: Schemaless and expression filtering

本文讨论如何在渗透查询中使用无模式文档。

渗透查询功能不仅允许存储全文匹配,还支持常规属性过滤。
在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版本中推出。
对无模式数据的全文匹配功能目前尚未支持,我们计划在未来添加此功能。目前,需要全文匹配的文本属性必须提取到单独的文本字段中。

安装Manticore Search

安装Manticore Search