Taieb
03/18/2025, 6:00 PM{
"searches": [
{
"collection": "casemanagement_cases",
"filter_by": "id:* || $casemanagement_case_category_relations(id:*)",
"include_fields": "$casemanagement_users(Name, strategy: merge) as AgentName,$casemanagement_clients(Name, strategy: merge) as ClientName,$queues_queuegroups(Name, strategy: merge) as GroupName, $casemanagement_case_category_relations(CategoryId, strategy: nest_array) as Categories",
"q": "",
"query_by": "ClientID",
"limit": 5,
"enable_lazy_filter": true,
"validate_field_names": true
}
]
}
I am doing a pretty complicated join. (not sure if best practice) but this works fine on dataset approx 2 million.. But it is pretty slow about 2 seconds to do this query. Do i miss something? When i remove the filter_by it goes quick about 2ms. The category_relation can have multiple caseIds that i want to join. Any suggestions?Jason Bosco
03/18/2025, 7:21 PMTaieb
03/18/2025, 7:47 PM"filter_by": "id:* || $casemanagement_case_category_relations(id:*)",
Taieb
03/18/2025, 7:47 PMTaieb
03/18/2025, 7:50 PMTaieb
03/18/2025, 10:05 PMsearchParameters {
q: '*',
query_by: 'ClientID',
sort_by: 'Created:DESC',
filter_by: 'InternalType:=[call,callback,chat,email,form,sms,social] && GroupId:=[135,162,383,445,584,585,615,616,0] && Status:=[Closed,Open]',
page: 1,
limit: 5
}
Do i do anything wrong or is this expected..?
@Jason BoscoTaieb
03/18/2025, 10:07 PM{
name: schemaName,
fields: [
{ name: '.*', type: 'auto' },
{ name: 'ID', type: 'int32' },
{ name: 'CaseID', type: 'string', sort: true },
{
name: 'GroupName',
type: 'string',
optional: true,
sort: true,
},
{ name: 'Status', type: 'string', sort: true },
{ name: 'Created', type: 'string', sort: true },
{ name: 'SLA', type: 'string', sort: true },
],
}
Jason Bosco
03/19/2025, 1:45 AM:=
to :
Taieb
03/19/2025, 8:02 AMTaieb
03/19/2025, 8:12 AMHarpreet Sangar
03/19/2025, 9:41 AMTaieb
03/19/2025, 9:41 AMTaieb
03/19/2025, 9:42 AMexport function schema(schemaName: string): CollectionCreateSchema {
switch (schemaName) {
case 'casemanagement_cases':
return {
name: schemaName,
fields: [
{ name: '.*', type: 'auto' },
{ name: 'ID', type: 'int32' },
{
name: 'UserId',
type: 'int32',
reference: 'casemanagement_users.UserId',
async_reference: true,
},
{
name: 'ClientID',
type: 'string',
reference: 'casemanagement_clients.ClientID',
async_reference: true,
},
],
default_sorting_field: 'ID',
};
case 'casemanagement_clients':
return {
name: schemaName,
fields: [
{ name: '.*', type: 'auto' },
{ name: 'ID', type: 'int32' },
{
name: 'ClientID',
type: 'string',
},
],
default_sorting_field: 'ID',
};
case 'casemanagement_users':
return {
name: schemaName,
fields: [
{ name: '.*', type: 'auto' },
{
name: 'UserId',
type: 'int32',
},
],
};
default:
return {
name: schemaName,
fields: [{ name: '.*', type: 'auto' }],
};
}
}
It was dynamically created, will this help you?Harpreet Sangar
03/19/2025, 9:44 AMcasemanagement_case_category_relations
collection?Taieb
03/19/2025, 9:50 AMTaieb
03/19/2025, 9:51 AMTaieb
03/19/2025, 9:51 AMTaieb
03/19/2025, 9:53 AMTaieb
03/19/2025, 9:53 AMHarpreet Sangar
03/19/2025, 9:53 AMTaieb
03/19/2025, 9:53 AMTaieb
03/19/2025, 10:00 AMsearchParameters {
q: '*',
query_by: 'ClientID',
sort_by: 'Created:DESC',
filter_by: 'InternalType:=[call,callback,chat,email,form,sms,social] && GroupId:=[135,162,383,445,584,585,615,616,0] && Status:=[Closed,Open]',
page: 1,
limit: 5
}
Fields:
[
{ name: 'ID', type: 'int32', index: false, optional: true },
{ name: 'Source', type: 'string', sort: true, index: false, optional: true },
{ name: 'CaseID', type: 'string', sort: true, index: false, optional: true },
{ name: 'ClientID', type: 'string', index: false, optional: true },
{ name: 'Author', type: 'string', sort: true, index: true, optional: true },
{ name: 'Parent', type: 'string', index: false, optional: true },
{ name: 'Status', type: 'string', sort: true, index: true, optional: true },
{ name: 'Topic', type: 'string', sort: true, index: true, optional: true },
{ name: 'Description', type: 'string', index: false, optional: true },
{ name: 'UserId', type: 'int32', index: false, optional: true },
{ name: 'SLA', type: 'string', sort: true, index: false, optional: true },
{ name: 'Answered', type: 'int32', optional: false },
{ name: 'Responded', type: 'int32', index: false, optional: true },
{ name: 'InternalCreated', type: 'int32', index: false, optional: true },
{ name: 'MsgID', type: 'string', index: false, optional: true },
{ name: 'CaseRespondant', type: 'string', index: false, optional: true },
{ name: 'AssignedTo', type: 'string', index: false, optional: true },
// { name: 'HasAttachment', type: 'int32', index: false, optional: true },
{ name: 'InternalType', type: 'string', index: true, optional: true },
{ name: 'Language', type: 'string', index: false, optional: true },
{ name: 'GroupId', type: 'int32', sort: false, index: true, optional: true },
{ name: 'Group', type: 'string', index: false, optional: true },
{ name: 'Result', type: 'string', index: false, optional: true },
{ name: 'Tries', type: 'int32', index: false, optional: true },
{ name: 'TextField', type: 'string', index: false, optional: true },
{ name: 'Text', type: 'string', index: false, optional: true },
{ name: 'UnreadMessages', type: 'int32', index: false, optional: true },
{ name: 'DateTime', type: 'string', index: false, optional: true },
{ name: 'Created', type: 'string', sort: true, index: true, optional: true },
{ name: 'LastIncoming', type: 'string', index: false, optional: true },
{ name: 'LastUpdated', type: 'string', index: false, optional: true },
{ name: 'LastUpdatedBy', type: 'int32', index: false, optional: true },
{ name: 'Resolved', type: 'int32', sort: true, index: false, optional: true },
{ name: 'ResolvedAt', type: 'string', sort: true, index: false, optional: true },
{ name: 'ResolvedBy', type: 'string', sort: true, index: false, optional: true },
{ name: 'AgentCommentTime', type: 'string', sort: true, index: false, optional: true },
{ name: 'InternalSubType', type: 'string', sort: true, index: false, optional: true },
{ name: 'Outgoing', type: 'bool', sort: true, index: true, optional: false },
{ name: 'IsChild', type: 'int32', sort: true, index: false, optional: true },
{ name: 'ToEmail', type: 'string', sort: true, index: false, optional: true },
{ name: 'CopyToEmail', type: 'string', sort: true, index: false, optional: true },
{ name: 'HiddenCopyToEmail', type: 'string', sort: true, index: false, optional: true },
{ name: 'Signature', type: 'string', sort: true, index: false, optional: true },
{ name: 'AgentName', type: 'string', sort: true, index: true, optional: true },
{ name: 'GroupName', type: 'string', sort: true, index: false, optional: true },
{ name: 'ClientName', type: 'string', sort: true, index: true, optional: true },
{ name: 'ClientPersonNr', type: 'string', sort: true, index: false, optional: true },
{ name: 'ContactName', type: 'string', sort: true, index: false, optional: true },
{ name: 'BrandId', type: 'int32', sort: false, index: false, optional: true },
{ name: 'QueueIcon', type: 'string', sort: false, index: false, optional: true },
{ name: 'CategoryCount', type: 'int32', sort: false, index: false, optional: true },
{ name: 'SubCasesCount', type: 'int32', sort: false, index: false, optional: true },
{ name: 'GroupIdNotNull', type: 'int32', sort: false, index: false, optional: true }
]
Harpreet Sangar
03/19/2025, 10:06 AMenable_lazy_filtering: true
when your filter_by
matches too many ids in comparison to the query.Harpreet Sangar
03/19/2025, 10:06 AM:=
to :
as Jason mentioned)Harpreet Sangar
03/19/2025, 10:08 AMsearch_time_ms
in the response?Taieb
03/19/2025, 10:08 AMTaieb
03/19/2025, 10:09 AMsearch_time_ms: 114
Taieb
03/19/2025, 10:09 AMTaieb
03/19/2025, 10:12 AMThere's no option to make it quicker with wildcard search (q: *).Any other way to solve it?
Taieb
03/19/2025, 10:13 AMresult {
facet_counts: [],
found: 747037,
hits: [
{ document: [Object], highlight: {}, highlights: [] },
{ document: [Object], highlight: {}, highlights: [] },
{ document: [Object], highlight: {}, highlights: [] },
{ document: [Object], highlight: {}, highlights: [] },
{ document: [Object], highlight: {}, highlights: [] }
],
out_of: 2510122,
page: 11,
request_params: {
collection_name: 'casemanagement_case_summary_view',
first_q: '*',
per_page: 5,
q: '*'
},
search_cutoff: false,
search_time_ms: 133
}
Harpreet Sangar
03/19/2025, 10:15 AMInternalType
, GroupId
, Status
, and Created
fields to see if there's room for improvement somewhere.Taieb
03/19/2025, 10:17 AM# InternalType, GroupId, Status, Created
'chat', '135', 'Closed', '2025-02-15 17:42:48'
'email', '162', 'Closed', '2025-02-16 08:50:09'
'chat', '135', 'Closed', '2025-02-16 11:50:03'
'email', '135', 'Closed', '2025-02-17 15:42:02'
'email', '135', 'Open', '2025-02-17 15:45:01'
'email', '135', 'Closed', '2025-02-17 15:49:02'
'chat', '383', 'Closed', '2025-02-21 13:25:21'
'chat', '135', 'Closed', '2025-02-26 10:45:58'
'chat', '135', 'Closed', '2025-02-26 14:40:49'
'chat', '135', 'Closed', '2025-02-26 15:07:36'
Taieb
03/19/2025, 10:17 AMTaieb
03/19/2025, 10:17 AMHarpreet Sangar
03/19/2025, 10:18 AMTaieb
03/19/2025, 10:18 AMTaieb
03/19/2025, 10:18 AMTaieb
03/19/2025, 10:20 AMHarpreet Sangar
03/19/2025, 10:20 AMTaieb
03/19/2025, 10:23 AMHarpreet Sangar
03/19/2025, 10:23 AMTaieb
03/19/2025, 10:24 AMtypesense/typesense:28.0
Taieb
03/19/2025, 10:28 AMTaieb
03/19/2025, 10:36 AMTaieb
03/19/2025, 10:36 AMHarpreet Sangar
03/19/2025, 10:49 AMTaieb
03/19/2025, 1:11 PMHarpreet Sangar
03/19/2025, 1:17 PMTaieb
03/19/2025, 1:18 PMTaieb
03/20/2025, 12:22 PMHarpreet Sangar
03/21/2025, 5:08 AMTaieb
03/21/2025, 7:42 AMTaieb
03/24/2025, 8:36 AMVincent Giersch
05/18/2025, 2:30 PMVincent Giersch
05/18/2025, 2:51 PMHarpreet Sangar
05/19/2025, 7:24 AMVincent Giersch
05/19/2025, 11:34 AM