Design for course batch stats
Approach 1
Nested participant object in one documents
Create an index and add settings
curl -X PUT
http://localhost:9200/cbatchstats/
-H 'Content-Type: application/json'
-H 'Postman-Token: a39bca1e-1412-45f2-bf3a-814109bd31c3'
-H 'cache-control: no-cache'
-d '{
"settings": {
"index": {
"number_of_shards": "5",
"analysis": {
"filter": {
"mynGram": {
"token_chars": [
"letter",
"digit",
"whitespace",
"punctuation",
"symbol"
],
"min_gram": "1",
"type": "ngram",
"max_gram": "20"
}
},
"analyzer": {
"cs_index_analyzer": {
"filter": [
"lowercase",
"mynGram"
],
"type": "custom",
"tokenizer": "standard"
},
"keylower": {
"filter": "lowercase",
"type": "custom",
"tokenizer": "keyword"
},
"cs_search_analyzer": {
"filter": [
"lowercase",
"standard"
],
"type": "custom",
"tokenizer": "standard"
}
}
},
"number_of_replicas": "1"
}
}
}'
Creating mapping for the index
curl -X PUT
http://localhost:9200/cbatchstats/_mapping/_doc
-H 'Content-Type: application/json'
-H 'Postman-Token: 5c2af6f7-8def-4122-b556-6c0a77d70675,56e956f8-f95b-4d7a-890f-2bf1da73db98,57d38de5-aa80-40b4-980b-52a1206a20c4'
-H 'cache-control: no-cache,no-cache,no-cache'
-d '{
"dynamic": false,
"properties": {
"all_fields": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower"
}
},
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer"
},
"batchId": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"completedCount": {
"type": "long",
"fields": {
"raw": {
"type": "long"
}
}
},
"courseId": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"endDate": {
"type": "date",
"fields": {
"raw": {
"type": "date"
}
}
},
"lastUpdatedOn": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"participantCount": {
"type": "long",
"fields": {
"raw": {
"type": "long"
}
}
},
"participants": {
"properties": {
"completedPercent": {
"type": "long",
"fields": {
"raw": {
"type": "long"
}
}
},
"districtName": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"enrolledOn": {
"type": "date",
"fields": {
"raw": {
"type": "date"
}
}
},
"active": {
"type": "boolean",
"fields": {
"raw": {
"type": "boolean"
}
}
},
"maskedEmail": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"maskedExternalId": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"maskedPhone": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"rootOrgName": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"subOrgName": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
}
}
},
"startDate": {
"type": "date",
"fields": {
"raw": {
"type": "date"
}
}
}
}
}'Approach 2
Create separate document for each user in course batch
Create an index and add settings
curl -X PUT
http://localhost:9200/cbatchstats/
-H 'Content-Type: application/json'
-H 'Postman-Token: a39bca1e-1412-45f2-bf3a-814109bd31c3'
-H 'cache-control: no-cache'
-d '{
"settings": {
"index": {
"number_of_shards": "5",
"analysis": {
"filter": {
"mynGram": {
"token_chars": ["letter", "digit", "whitespace", "punctuation", "symbol"],
"min_gram": "1",
"type": "ngram",
"max_gram": "20"
}
},
"analyzer": {
"cs_index_analyzer": {
"filter": ["lowercase", "mynGram"],
"type": "custom",
"tokenizer": "standard"
},
"keylower": {
"filter": "lowercase",
"type": "custom",
"tokenizer": "keyword"
},
"cs_search_analyzer": {
"filter": ["lowercase", "standard"],
"type": "custom",
"tokenizer": "standard"
}
}
},
"number_of_replicas": "1"
}
}
}'
Creating mapping for the index
curl -X PUT
http://localhost:9200/cbatchstats/_mapping/_doc
-H 'Content-Type: application/json'
-H 'Postman-Token: 5c2af6f7-8def-4122-b556-6c0a77d70675,56e956f8-f95b-4d7a-890f-2bf1da73db98,57d38de5-aa80-40b4-980b-52a1206a20c4'
-H 'cache-control: no-cache,no-cache,no-cache'
-d '{
"dynamic": false,
"properties": {
"all_fields": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower"
}
},
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer"
},
"batchId": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"completedCount": {
"type": "long",
"fields": {
"raw": {
"type": "long"
}
}
},
"courseId": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"endDate": {
"type": "date",
"fields": {
"raw": {
"type": "date"
}
}
},
"lastUpdatedOn": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"participantCount": {
"type": "long",
"fields": {
"raw": {
"type": "long"
}
}
},
"completedPercent": {
"type": "long",
"fields": {
"raw": {
"type": "long"
}
}
},
"districtName": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"enrolledOn": {
"type": "date",
"fields": {
"raw": {
"type": "date"
}
}
},
"maskedEmail": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"maskedExternalId": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"maskedPhone": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"rootOrgName": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"subOrgName": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"startDate": {
"type": "date",
"fields": {
"raw": {
"type": "date"
}
}
}
}
}'Approach 3
Create an index and add settings
curl -X PUT
http://localhost:9200/cbatchstats/
-H 'Content-Type: application/json'
-H 'Postman-Token: a39bca1e-1412-45f2-bf3a-814109bd31c3'
-H 'cache-control: no-cache'
-d '{
"settings": {
"index": {
"number_of_shards": "5",
"analysis": {
"filter": {
"mynGram": {
"token_chars": ["letter", "digit", "whitespace", "punctuation", "symbol"],
"min_gram": "1",
"type": "ngram",
"max_gram": "20"
}
},
"analyzer": {
"cs_index_analyzer": {
"filter": ["lowercase", "mynGram"],
"type": "custom",
"tokenizer": "standard"
},
"keylower": {
"filter": "lowercase",
"type": "custom",
"tokenizer": "keyword"
},
"cs_search_analyzer": {
"filter": ["lowercase", "standard"],
"type": "custom",
"tokenizer": "standard"
}
}
},
"number_of_replicas": "1"
}
}
}'
Creating mapping for the index
curl -X PUT
http://localhost:9200/cbatchstats/_mapping/_doc
-H 'Content-Type: application/json'
-H 'Postman-Token: 5c2af6f7-8def-4122-b556-6c0a77d70675,56e956f8-f95b-4d7a-890f-2bf1da73db98,57d38de5-aa80-40b4-980b-52a1206a20c4'
-H 'cache-control: no-cache,no-cache,no-cache'
-d '{
"dynamic": false,
"properties": {
"all_fields": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower"
}
},
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer"
},
"batchId": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
}
"courseId": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
}
"lastUpdatedOn": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
"completedPercent": {
"type": "long",
"fields": {
"raw": {
"type": "long"
}
}
},
"districtName": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"enrolledOn": {
"type": "date",
"fields": {
"raw": {
"type": "date"
}
}
},
"maskedEmail": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"maskedPhone": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"rootOrgName": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
},
"subOrgName": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower",
"fielddata": true
}
},
"copy_to": [
"all_fields"
],
"analyzer": "cs_index_analyzer",
"search_analyzer": "cs_search_analyzer",
"fielddata": true
}
}
}'