From 753e5e46907829b69695666295b3203696d4bef8 Mon Sep 17 00:00:00 2001
From: Andrey Platov <andrey@hardcoreeng.com>
Date: Thu, 26 Aug 2021 19:59:08 +0200
Subject: [PATCH] add index to model

Signed-off-by: Andrey Platov <andrey@hardcoreeng.com>
---
 dev/storage/src/model.tx.json  | 377 +++++++++++++++++----------------
 models/chunter/src/index.ts    |   5 +-
 packages/core/src/classes.ts   |   8 +
 packages/core/src/hierarchy.ts |   8 +
 packages/model/src/dsl.ts      |  29 ++-
 5 files changed, 245 insertions(+), 182 deletions(-)

diff --git a/dev/storage/src/model.tx.json b/dev/storage/src/model.tx.json
index 00d033c741..3b13f553d5 100644
--- a/dev/storage/src/model.tx.json
+++ b/dev/storage/src/model.tx.json
@@ -1,25 +1,25 @@
 [
   {
-    "_id": "611d2d25131730f65a01979e",
+    "_id": "6127d57ec1de958c9b1fb54e",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "core:class:Obj",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053653,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0
     }
   },
   {
-    "_id": "611d2d25131730f65a01979f",
+    "_id": "6127d57ec1de958c9b1fb54f",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "core:class:Doc",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053653,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -27,13 +27,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197a0",
+    "_id": "6127d57ec1de958c9b1fb550",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "core:class:Type",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053653,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -41,13 +41,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197a1",
+    "_id": "6127d57ec1de958c9b1fb551",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "core:class:TypeString",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053653,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -55,13 +55,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197a2",
+    "_id": "6127d57ec1de958c9b1fb552",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "core:class:Attribute",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053653,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -69,13 +69,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197a3",
+    "_id": "6127d57ec1de958c9b1fb553",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "core:class:Account",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053653,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "domain": "model",
@@ -84,13 +84,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197a4",
+    "_id": "6127d57ec1de958c9b1fb554",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "core:class:Space",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053653,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "domain": "model",
@@ -99,13 +99,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197a5",
+    "_id": "6127d57ec1de958c9b1fb555",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "core:class:Tx",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053653,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "domain": "tx",
@@ -114,13 +114,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197a6",
+    "_id": "6127d57ec1de958c9b1fb556",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "core:class:TxCUD",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053653,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -128,13 +128,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197a7",
+    "_id": "6127d57ec1de958c9b1fb557",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "core:class:TxUpdateDoc",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053653,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -142,13 +142,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197a8",
+    "_id": "6127d57ec1de958c9b1fb558",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "core:class:TxMixin",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053653,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -156,13 +156,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197a9",
+    "_id": "6127d57ec1de958c9b1fb559",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "core:class:TxCreateDoc",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053653,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -170,13 +170,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197aa",
+    "_id": "6127d57ec1de958c9b1fb55a",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "core:class:Class",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053653,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "domain": "model",
@@ -185,13 +185,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197ab",
+    "_id": "6127d57ec1de958c9b1fb55b",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "core:class:Mixin",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053653,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -199,13 +199,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197ac",
+    "_id": "6127d57ec1de958c9b1fb55c",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "view:class:Viewlet",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "domain": "model",
@@ -214,13 +214,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197ad",
+    "_id": "6127d57ec1de958c9b1fb55d",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "view:class:ViewletDescriptor",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "domain": "model",
@@ -229,13 +229,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197ae",
+    "_id": "6127d57ec1de958c9b1fb55e",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "view:mixin:AttributePresenter",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -243,13 +243,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197af",
+    "_id": "6127d57ec1de958c9b1fb55f",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "view:mixin:AttributeEditor",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510000,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -257,11 +257,11 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197b0",
+    "_id": "6127d57ec1de958c9b1fb560",
     "_class": "core:class:TxMixin",
     "space": "core:space:Tx",
     "modifiedBy": "core:account:System",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510000,
     "objectId": "core:class:TypeString",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
@@ -271,11 +271,11 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197b1",
+    "_id": "6127d57ec1de958c9b1fb561",
     "_class": "core:class:TxMixin",
     "space": "core:space:Tx",
     "modifiedBy": "core:account:System",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510001,
     "objectId": "core:class:TypeString",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
@@ -285,13 +285,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197b2",
+    "_id": "6127d57ec1de958c9b1fb562",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "view:viewlet:Table",
     "objectClass": "view:class:ViewletDescriptor",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "label": "Table",
@@ -300,13 +300,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197b3",
+    "_id": "6127d57ec1de958c9b1fb563",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "workbench:mixin:SpaceView",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -314,13 +314,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197b4",
+    "_id": "6127d57ec1de958c9b1fb564",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "workbench:class:Application",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "domain": "model",
@@ -329,13 +329,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197b5",
+    "_id": "6127d57ec1de958c9b1fb565",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "contact:class:Contact",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "domain": "contact",
@@ -344,13 +344,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197b6",
+    "_id": "6127d57ec1de958c9b1fb566",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "contact:class:Person",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -359,103 +359,103 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197b7",
-    "objectId": "611d2d25131730f65a0197b8",
+    "_id": "6127d57ec1de958c9b1fb567",
+    "objectId": "6127d57ec1de958c9b1fb568",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "modifiedBy": "core:account:System",
-    "modifiedOn": 1629302053448,
+    "modifiedOn": 1630000509834,
     "objectSpace": "core:space:Model",
     "objectClass": "core:class:Attribute",
     "attributes": {
+      "name": "firstName",
       "type": {
         "_class": "core:class:TypeString"
       },
-      "name": "firstName",
       "label": "First name",
       "attributeOf": "contact:class:Person"
     }
   },
   {
-    "_id": "611d2d25131730f65a0197b9",
-    "objectId": "611d2d25131730f65a0197ba",
+    "_id": "6127d57ec1de958c9b1fb569",
+    "objectId": "6127d57ec1de958c9b1fb56a",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "modifiedBy": "core:account:System",
-    "modifiedOn": 1629302053448,
+    "modifiedOn": 1630000509834,
     "objectSpace": "core:space:Model",
     "objectClass": "core:class:Attribute",
     "attributes": {
+      "name": "lastName",
       "type": {
         "_class": "core:class:TypeString"
       },
-      "name": "lastName",
       "label": "Last name",
       "attributeOf": "contact:class:Person"
     }
   },
   {
-    "_id": "611d2d25131730f65a0197bb",
-    "objectId": "611d2d25131730f65a0197bc",
+    "_id": "6127d57ec1de958c9b1fb56b",
+    "objectId": "6127d57ec1de958c9b1fb56c",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "modifiedBy": "core:account:System",
-    "modifiedOn": 1629302053448,
+    "modifiedOn": 1630000509834,
     "objectSpace": "core:space:Model",
     "objectClass": "core:class:Attribute",
     "attributes": {
+      "name": "email",
       "type": {
         "_class": "core:class:TypeString"
       },
-      "name": "email",
       "label": "Email",
       "attributeOf": "contact:class:Person"
     }
   },
   {
-    "_id": "611d2d25131730f65a0197bd",
-    "objectId": "611d2d25131730f65a0197be",
+    "_id": "6127d57ec1de958c9b1fb56d",
+    "objectId": "6127d57ec1de958c9b1fb56e",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "modifiedBy": "core:account:System",
-    "modifiedOn": 1629302053448,
+    "modifiedOn": 1630000509834,
     "objectSpace": "core:space:Model",
     "objectClass": "core:class:Attribute",
     "attributes": {
+      "name": "phone",
       "type": {
         "_class": "core:class:TypeString"
       },
-      "name": "phone",
       "label": "Phone",
       "attributeOf": "contact:class:Person"
     }
   },
   {
-    "_id": "611d2d25131730f65a0197bf",
-    "objectId": "611d2d25131730f65a0197c0",
+    "_id": "6127d57ec1de958c9b1fb56f",
+    "objectId": "6127d57ec1de958c9b1fb570",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "modifiedBy": "core:account:System",
-    "modifiedOn": 1629302053448,
+    "modifiedOn": 1630000509834,
     "objectSpace": "core:space:Model",
     "objectClass": "core:class:Attribute",
     "attributes": {
+      "name": "city",
       "type": {
         "_class": "core:class:TypeString"
       },
-      "name": "city",
       "label": "City",
       "attributeOf": "contact:class:Person"
     }
   },
   {
-    "_id": "611d2d25131730f65a0197c1",
+    "_id": "6127d57ec1de958c9b1fb571",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "contact:class:Employee",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -463,13 +463,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197c2",
+    "_id": "6127d57ec1de958c9b1fb572",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "contact:class:Organization",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -477,13 +477,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197c3",
+    "_id": "6127d57ec1de958c9b1fb573",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "contact:space:Employee",
     "objectClass": "core:class:Space",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "name": "Employees",
@@ -493,11 +493,11 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197c4",
+    "_id": "6127d57ec1de958c9b1fb574",
     "_class": "core:class:TxMixin",
     "space": "core:space:Tx",
     "modifiedBy": "core:account:System",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510001,
     "objectId": "contact:class:Person",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
@@ -507,13 +507,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197c5",
+    "_id": "6127d57ec1de958c9b1fb575",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "chunter:class:Comment",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "domain": "comment",
@@ -522,13 +522,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197c6",
+    "_id": "6127d57ec1de958c9b1fb576",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "chunter:class:Backlink",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -536,13 +536,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197c7",
+    "_id": "6127d57ec1de958c9b1fb577",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "chunter:class:Message",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "domain": "chunter",
@@ -551,13 +551,32 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197c8",
+    "_id": "6127d57ec1de958c9b1fb578",
+    "objectId": "6127d57ec1de958c9b1fb579",
+    "_class": "core:class:TxCreateDoc",
+    "space": "core:space:Tx",
+    "modifiedBy": "core:account:System",
+    "modifiedOn": 1630000509938,
+    "objectSpace": "core:space:Model",
+    "objectClass": "core:class:Attribute",
+    "attributes": {
+      "name": "content",
+      "index": 0,
+      "type": {
+        "_class": "core:class:TypeString"
+      },
+      "label": "Content",
+      "attributeOf": "chunter:class:Message"
+    }
+  },
+  {
+    "_id": "6127d57ec1de958c9b1fb57a",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "chunter:class:Channel",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053654,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -567,11 +586,11 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197c9",
+    "_id": "6127d57ec1de958c9b1fb57b",
     "_class": "core:class:TxMixin",
     "space": "core:space:Tx",
     "modifiedBy": "core:account:System",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "objectId": "chunter:class:Channel",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
@@ -583,13 +602,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197ca",
+    "_id": "6127d57ec1de958c9b1fb57c",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "chunter:viewlet:Chat",
     "objectClass": "view:class:ViewletDescriptor",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "label": "Chat",
@@ -598,13 +617,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197cb",
+    "_id": "6127d57ec1de958c9b1fb57d",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197cc",
+    "objectId": "6127d57ec1de958c9b1fb57e",
     "objectClass": "view:class:Viewlet",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "attachTo": "chunter:class:Message",
@@ -614,13 +633,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197cd",
+    "_id": "6127d57ec1de958c9b1fb57f",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197ce",
+    "objectId": "6127d57ec1de958c9b1fb580",
     "objectClass": "workbench:class:Application",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "label": "chunter:string:ApplicationLabelChunter",
@@ -638,13 +657,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197cf",
+    "_id": "6127d57ec1de958c9b1fb581",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197d0",
+    "objectId": "6127d57ec1de958c9b1fb582",
     "objectClass": "chunter:class:Channel",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "name": "general",
@@ -654,13 +673,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197d1",
+    "_id": "6127d57ec1de958c9b1fb583",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197d2",
+    "objectId": "6127d57ec1de958c9b1fb584",
     "objectClass": "chunter:class:Channel",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "name": "random",
@@ -670,13 +689,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197d3",
+    "_id": "6127d57ec1de958c9b1fb585",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "task:class:Task",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -684,67 +703,67 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197d4",
-    "objectId": "611d2d25131730f65a0197d5",
+    "_id": "6127d57ec1de958c9b1fb586",
+    "objectId": "6127d57ec1de958c9b1fb587",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "modifiedBy": "core:account:System",
-    "modifiedOn": 1629302053498,
+    "modifiedOn": 1630000509882,
     "objectSpace": "core:space:Model",
     "objectClass": "core:class:Attribute",
     "attributes": {
+      "name": "title",
       "type": {
         "_class": "core:class:TypeString"
       },
-      "name": "title",
       "label": "Title",
       "attributeOf": "task:class:Task"
     }
   },
   {
-    "_id": "611d2d25131730f65a0197d6",
-    "objectId": "611d2d25131730f65a0197d7",
+    "_id": "6127d57ec1de958c9b1fb588",
+    "objectId": "6127d57ec1de958c9b1fb589",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "modifiedBy": "core:account:System",
-    "modifiedOn": 1629302053498,
+    "modifiedOn": 1630000509882,
     "objectSpace": "core:space:Model",
     "objectClass": "core:class:Attribute",
     "attributes": {
+      "name": "description",
       "type": {
         "_class": "core:class:TypeString"
       },
-      "name": "description",
       "label": "Description",
       "attributeOf": "task:class:Task"
     }
   },
   {
-    "_id": "611d2d25131730f65a0197d8",
-    "objectId": "611d2d25131730f65a0197d9",
+    "_id": "6127d57ec1de958c9b1fb58a",
+    "objectId": "6127d57ec1de958c9b1fb58b",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "modifiedBy": "core:account:System",
-    "modifiedOn": 1629302053498,
+    "modifiedOn": 1630000509882,
     "objectSpace": "core:space:Model",
     "objectClass": "core:class:Attribute",
     "attributes": {
+      "name": "assignee",
       "type": {
         "_class": "core:class:TypeString"
       },
-      "name": "assignee",
       "label": "Assignee",
       "attributeOf": "task:class:Task"
     }
   },
   {
-    "_id": "611d2d25131730f65a0197da",
+    "_id": "6127d57ec1de958c9b1fb58c",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "task:class:Project",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -754,11 +773,11 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197db",
+    "_id": "6127d57ec1de958c9b1fb58d",
     "_class": "core:class:TxMixin",
     "space": "core:space:Tx",
     "modifiedBy": "core:account:System",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "objectId": "task:class:Project",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
@@ -771,13 +790,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197dc",
+    "_id": "6127d57ec1de958c9b1fb58e",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197dd",
+    "objectId": "6127d57ec1de958c9b1fb58f",
     "objectClass": "view:class:Viewlet",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "attachTo": "task:class:Task",
@@ -795,13 +814,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197de",
+    "_id": "6127d57ec1de958c9b1fb590",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197df",
+    "objectId": "6127d57ec1de958c9b1fb591",
     "objectClass": "workbench:class:Application",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "label": "task:string:ApplicationLabelTask",
@@ -819,13 +838,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197e0",
+    "_id": "6127d57ec1de958c9b1fb592",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197e1",
+    "objectId": "6127d57ec1de958c9b1fb593",
     "objectClass": "task:class:Project",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "name": "demo",
@@ -835,13 +854,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197e2",
+    "_id": "6127d57ec1de958c9b1fb594",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "recruit:class:Applicant",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "domain": "recruit",
@@ -850,31 +869,31 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197e3",
-    "objectId": "611d2d25131730f65a0197e4",
+    "_id": "6127d57ec1de958c9b1fb595",
+    "objectId": "6127d57ec1de958c9b1fb596",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "modifiedBy": "core:account:System",
-    "modifiedOn": 1629302053609,
+    "modifiedOn": 1630000509995,
     "objectSpace": "core:space:Model",
     "objectClass": "core:class:Attribute",
     "attributes": {
+      "name": "candidate",
       "type": {
         "_class": "core:class:TypeString"
       },
-      "name": "candidate",
       "label": "Candidate",
       "attributeOf": "recruit:class:Applicant"
     }
   },
   {
-    "_id": "611d2d25131730f65a0197e5",
+    "_id": "6127d57ec1de958c9b1fb597",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "recruit:class:Candidate",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -883,13 +902,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197e6",
+    "_id": "6127d57ec1de958c9b1fb598",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "recruit:class:Candidates",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -899,13 +918,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197e7",
+    "_id": "6127d57ec1de958c9b1fb599",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "recruit:class:Vacancy",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "kind": 0,
@@ -915,11 +934,11 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197e8",
+    "_id": "6127d57ec1de958c9b1fb59a",
     "_class": "core:class:TxMixin",
     "space": "core:space:Tx",
     "modifiedBy": "core:account:System",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "objectId": "recruit:class:Vacancy",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
@@ -932,11 +951,11 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197e9",
+    "_id": "6127d57ec1de958c9b1fb59b",
     "_class": "core:class:TxMixin",
     "space": "core:space:Tx",
     "modifiedBy": "core:account:System",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "objectId": "recruit:class:Candidates",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
@@ -949,13 +968,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197ea",
+    "_id": "6127d57ec1de958c9b1fb59c",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197eb",
+    "objectId": "6127d57ec1de958c9b1fb59d",
     "objectClass": "workbench:class:Application",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "label": "recruit:string:RecruitApplication",
@@ -979,13 +998,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197ec",
+    "_id": "6127d57ec1de958c9b1fb59e",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "recruit:space:CandidatesPublic",
     "objectClass": "recruit:class:Candidates",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "name": "public",
@@ -995,13 +1014,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197ed",
+    "_id": "6127d57ec1de958c9b1fb59f",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197ee",
+    "objectId": "6127d57ec1de958c9b1fb5a0",
     "objectClass": "view:class:Viewlet",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "attachTo": "recruit:class:Candidate",
@@ -1016,13 +1035,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197ef",
+    "_id": "6127d57ec1de958c9b1fb5a1",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197f0",
+    "objectId": "6127d57ec1de958c9b1fb5a2",
     "objectClass": "view:class:Viewlet",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "attachTo": "recruit:class:Applicant",
@@ -1041,13 +1060,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197f1",
+    "_id": "6127d57ec1de958c9b1fb5a3",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
     "objectId": "server-core:class:Trigger",
     "objectClass": "core:class:Class",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "domain": "model",
@@ -1056,26 +1075,26 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197f2",
+    "_id": "6127d57ec1de958c9b1fb5a4",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197f3",
+    "objectId": "6127d57ec1de958c9b1fb5a5",
     "objectClass": "server-core:class:Trigger",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "trigger": "server-chunter:trigger:OnMessage"
     }
   },
   {
-    "_id": "611d2d25131730f65a0197f4",
+    "_id": "6127d57ec1de958c9b1fb5a6",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197f5",
+    "objectId": "6127d57ec1de958c9b1fb5a7",
     "objectClass": "contact:class:Employee",
     "objectSpace": "contact:space:Employee",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "firstName": "Rosamund",
@@ -1086,26 +1105,26 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197f6",
+    "_id": "6127d57ec1de958c9b1fb5a8",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197f7",
+    "objectId": "6127d57ec1de958c9b1fb5a9",
     "objectClass": "core:class:Account",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "email": "rosamund@hc.engineering"
     }
   },
   {
-    "_id": "611d2d25131730f65a0197f8",
+    "_id": "6127d57ec1de958c9b1fb5aa",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197f9",
+    "objectId": "6127d57ec1de958c9b1fb5ab",
     "objectClass": "contact:class:Employee",
     "objectSpace": "contact:space:Employee",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "firstName": "Elon",
@@ -1116,26 +1135,26 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197fa",
+    "_id": "6127d57ec1de958c9b1fb5ac",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197fb",
+    "objectId": "6127d57ec1de958c9b1fb5ad",
     "objectClass": "core:class:Account",
     "objectSpace": "core:space:Model",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "email": "elon@hc.engineering"
     }
   },
   {
-    "_id": "611d2d25131730f65a0197fc",
+    "_id": "6127d57ec1de958c9b1fb5ae",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197fd",
+    "objectId": "6127d57ec1de958c9b1fb5af",
     "objectClass": "recruit:class:Candidate",
     "objectSpace": "recruit:space:CandidatesPublic",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "firstName": "Andrey",
@@ -1146,13 +1165,13 @@
     }
   },
   {
-    "_id": "611d2d25131730f65a0197fe",
+    "_id": "6127d57ec1de958c9b1fb5b0",
     "_class": "core:class:TxCreateDoc",
     "space": "core:space:Tx",
-    "objectId": "611d2d25131730f65a0197ff",
+    "objectId": "6127d57ec1de958c9b1fb5b1",
     "objectClass": "recruit:class:Candidate",
     "objectSpace": "recruit:space:CandidatesPublic",
-    "modifiedOn": 1629302053655,
+    "modifiedOn": 1630000510001,
     "modifiedBy": "core:account:System",
     "attributes": {
       "firstName": "Marina",
diff --git a/models/chunter/src/index.ts b/models/chunter/src/index.ts
index f1af89ad68..35a4b2fd18 100644
--- a/models/chunter/src/index.ts
+++ b/models/chunter/src/index.ts
@@ -14,8 +14,9 @@
 //
 
 import type { IntlString } from '@anticrm/platform'
-import { Builder, Model, UX } from '@anticrm/model'
+import { Builder, Model, Prop, UX, TypeString, Index } from '@anticrm/model'
 import type { Ref, Doc, Class, Domain } from '@anticrm/core'
+import { IndexKind } from '@anticrm/core'
 import core, { TSpace, TDoc } from '@anticrm/model-core'
 import type { Backlink, Channel, Message, Comment } from '@anticrm/chunter'
 import type { AnyComponent } from '@anticrm/ui'
@@ -34,6 +35,8 @@ export class TChannel extends TSpace implements Channel {}
 
 @Model(chunter.class.Message, core.class.Doc, DOMAIN_CHUNTER)
 export class TMessage extends TDoc implements Message {
+  @Prop(TypeString(), 'Content' as IntlString)
+  @Index(IndexKind.FullText)
   content!: string
 }
 
diff --git a/packages/core/src/classes.ts b/packages/core/src/classes.ts
index 1ecfaa3bd7..bb05ee7c2e 100644
--- a/packages/core/src/classes.ts
+++ b/packages/core/src/classes.ts
@@ -67,6 +67,13 @@ export interface UXObject extends Obj {
 // eslint-disable-next-line @typescript-eslint/no-unused-vars
 export interface Type<T extends PropertyType> extends UXObject {}
 
+/**
+ * @public
+ */
+export enum IndexKind {
+  FullText
+}
+
 /**
  * @public
  */
@@ -74,6 +81,7 @@ export interface Attribute<T extends PropertyType> extends Doc, UXObject {
   attributeOf: Ref<Class<Obj>>
   name: string
   type: Type<T>
+  index?: IndexKind
 }
 
 /**
diff --git a/packages/core/src/hierarchy.ts b/packages/core/src/hierarchy.ts
index a14895e648..2ce33b7b26 100644
--- a/packages/core/src/hierarchy.ts
+++ b/packages/core/src/hierarchy.ts
@@ -169,6 +169,14 @@ export class Hierarchy {
     attributes.set(attribute.name, attribute)
   }
 
+  getAttributes (clazz: Ref<Class<Obj>>): Map<string, AnyAttribute> {
+    const attributes = this.attributes.get(clazz)
+    if (attributes === undefined) {
+      throw new Error('attributes not found for class ' + clazz)
+    }
+    return attributes
+  }
+
   getAttribute (_class: Ref<Class<Obj>>, name: string): AnyAttribute {
     const attribute = this.attributes.get(_class)?.get(name)
     if (attribute === undefined) {
diff --git a/packages/model/src/dsl.ts b/packages/model/src/dsl.ts
index 7151e3cde2..237f45ddb6 100644
--- a/packages/model/src/dsl.ts
+++ b/packages/model/src/dsl.ts
@@ -29,7 +29,7 @@ import type {
   Space,
   ExtendedAttributes
 } from '@anticrm/core'
-import { ClassifierKind, generateId, TxFactory } from '@anticrm/core'
+import { ClassifierKind, IndexKind, generateId, TxFactory } from '@anticrm/core'
 import type { IntlString, Asset } from '@anticrm/platform'
 import toposort from 'toposort'
 
@@ -37,6 +37,21 @@ import core from './component'
 
 type NoIDs<T extends Tx> = Omit<T, '_id' | 'objectId'>
 
+const targets = new Map<any, Map<string, IndexKind>>()
+
+function setIndex (target: any, property: string, index: IndexKind): void {
+  let indexes = targets.get(target)
+  if (indexes === undefined) {
+    indexes = new Map<string, IndexKind>()
+    targets.set(target, indexes)
+  }
+  indexes.set(property, index)
+}
+
+function getIndex (target: any, property: string): IndexKind | undefined {
+  return targets.get(target)?.get(property)
+}
+
 interface ClassTxes {
   _id: Ref<Class<Obj>>
   extends?: Ref<Class<Obj>>
@@ -77,8 +92,9 @@ export function Prop (type: Type<PropertyType>, label?: IntlString, icon?: Asset
       objectSpace: core.space.Model,
       objectClass: core.class.Attribute,
       attributes: {
-        type,
         name: propertyKey,
+        index: getIndex(target, propertyKey),
+        type,
         label,
         icon,
         attributeOf: txes._id // undefined, need to fix later
@@ -88,6 +104,15 @@ export function Prop (type: Type<PropertyType>, label?: IntlString, icon?: Asset
   }
 }
 
+/**
+ * @public
+ */
+export function Index (kind: IndexKind) {
+  return function (target: any, propertyKey: string): void {
+    setIndex(target, propertyKey, kind)
+  }
+}
+
 /**
  * @public
  */