# Percolate queries: Schemaless and expression filtering

В этой статье мы обсуждаем, как безсхемные документы могут использоваться в Percolate Queries.

Функция Percolate Query позволяет сохранять не только полнотекстовые совпадения, но и обычную фильтрацию по атрибутам. 
До версии 2.7.0 это было ограничено единственным условием по числовому атрибуту. 

Теперь фильтрация может работать с **string** и **JSON** атрибутами. Фильтрация JSON интересна тем, что вы можете проверять безсхемные документы против сохранённых запросов. Фильтрация также теперь поддерживает множественную фильтрацию по атрибутам и использование **expressions**, что позволяет создавать более сложные сохранённые критерии.


```sql

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)');


```


 

```sql

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.
Полнотекстовое сопоставление с безсхемными данными пока не поддерживается, мы планируем добавить его в будущем. Пока свойства текста, требующие полнотекстового сопоставления, необходимо извлекать в отдельные текстовые поля.
