Performance improvements for Share Repository browser queries.

DB with ~50,000 nodes under Company Home:
  Before:
  - I'm Editing - 16 secs, Favorites - 17 secs, Tag - 14 secs
  After: 
  - I'm Editing - 1.5 secs, Favorites - 1.2 secs, Tag - 1.25 secs

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@31051 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Kevin Roast
2011-10-07 15:36:47 +00:00
parent 4563d86495
commit 10d2676d4c
2 changed files with 40 additions and 64 deletions

View File

@@ -138,13 +138,7 @@ var Filters =
date.setDate(date.getDate() - dayCount); date.setDate(date.getDate() - dayCount);
var fromQuery = date.getFullYear() + "\\-" + (date.getMonth() + 1) + "\\-" + date.getDate(); var fromQuery = date.getFullYear() + "\\-" + (date.getMonth() + 1) + "\\-" + date.getDate();
filterQuery = "+PATH:\"" + parsedArgs.rootNode.qnamePath; filterQuery = this.constructPathQuery(parsedArgs);
if (parsedArgs.nodeRef == "alfresco://sites/home")
{
// Special case for "Sites home" pseudo-nodeRef
filterQuery += "/*/cm:documentLibrary";
}
filterQuery += "//*\"";
filterQuery += " +@cm\\:" + dateField + ":[" + fromQuery + "T00\\:00\\:00.000 TO " + toQuery + "T23\\:59\\:59.999]"; filterQuery += " +@cm\\:" + dateField + ":[" + fromQuery + "T00\\:00\\:00.000 TO " + toQuery + "T23\\:59\\:59.999]";
if (onlySelf) if (onlySelf)
{ {
@@ -161,24 +155,14 @@ var Filters =
break; break;
case "editingMe": case "editingMe":
filterQuery = "+PATH:\"" + parsedArgs.rootNode.qnamePath; filterQuery = this.constructPathQuery(parsedArgs);
if (parsedArgs.nodeRef == "alfresco://sites/home")
{
filterQuery += "/*/cm:documentLibrary";
}
filterQuery += "//*\"";
filterQuery += " +ASPECT:\"workingcopy\""; filterQuery += " +ASPECT:\"workingcopy\"";
filterQuery += " +@cm\\:workingCopyOwner:\"" + person.properties.userName + '"'; filterQuery += " +@cm\\:workingCopyOwner:\"" + person.properties.userName + '"';
filterParams.query = filterQuery; filterParams.query = filterQuery;
break; break;
case "editingOthers": case "editingOthers":
filterQuery = "+PATH:\"" + parsedArgs.rootNode.qnamePath; filterQuery = this.constructPathQuery(parsedArgs);
if (parsedArgs.nodeRef == "alfresco://sites/home")
{
filterQuery += "/*/cm:documentLibrary";
}
filterQuery += "//*\"";
filterQuery += " +ASPECT:\"workingcopy\""; filterQuery += " +ASPECT:\"workingcopy\"";
filterQuery += " -@cm\\:workingCopyOwner:\"" + person.properties.userName + '"'; filterQuery += " -@cm\\:workingCopyOwner:\"" + person.properties.userName + '"';
filterParams.query = filterQuery; filterParams.query = filterQuery;
@@ -199,13 +183,7 @@ var Filters =
if (filterQuery.length > 0) if (filterQuery.length > 0)
{ {
filterQuery = "+(" + filterQuery + ") "; filterQuery = "+(" + filterQuery + ") " + this.constructPathQuery(parsedArgs);
filterQuery += "+PATH:\"" + parsedArgs.rootNode.qnamePath;
if (parsedArgs.nodeRef == "alfresco://sites/home")
{
filterQuery += "/*/cm:documentLibrary";
}
filterQuery += "//*\"";
} }
else else
{ {
@@ -228,12 +206,7 @@ var Filters =
filterData = filterData.slice(0, -1); filterData = filterData.slice(0, -1);
} }
filterQuery = "+PATH:\"" + parsedArgs.rootNode.qnamePath; filterQuery = this.constructPathQuery(parsedArgs);
if (parsedArgs.nodeRef == "alfresco://sites/home")
{
filterQuery += "/*/cm:documentLibrary";
}
filterQuery += "//*\"";
filterParams.query = filterQuery + " +PATH:\"/cm:taggable/cm:" + search.ISO9075Encode(filterData) + "/member\""; filterParams.query = filterQuery + " +PATH:\"/cm:taggable/cm:" + search.ISO9075Encode(filterData) + "/member\"";
break; break;
@@ -266,5 +239,20 @@ var Filters =
} }
return filterParams; return filterParams;
},
constructPathQuery: function constructPathQuery(parsedArgs)
{
var pathQuery = "";
if (parsedArgs.nodeRef != "alfresco://company/home")
{
pathQuery = "+PATH:\"" + parsedArgs.rootNode.qnamePath;
if (parsedArgs.nodeRef == "alfresco://sites/home")
{
pathQuery += "/*/cm:documentLibrary";
}
pathQuery += "//*\"";
}
return pathQuery;
} }
}; };

View File

@@ -138,13 +138,7 @@ var Filters =
date.setDate(date.getDate() - dayCount); date.setDate(date.getDate() - dayCount);
var fromQuery = date.getFullYear() + "\\-" + (date.getMonth() + 1) + "\\-" + date.getDate(); var fromQuery = date.getFullYear() + "\\-" + (date.getMonth() + 1) + "\\-" + date.getDate();
filterQuery = "+PATH:\"" + parsedArgs.rootNode.qnamePath; filterQuery = this.constructPathQuery(parsedArgs);
if (parsedArgs.nodeRef == "alfresco://sites/home")
{
// Special case for "Sites home" pseudo-nodeRef
filterQuery += "/*/cm:documentLibrary";
}
filterQuery += "//*\"";
filterQuery += " +@cm\\:" + dateField + ":[" + fromQuery + "T00\\:00\\:00.000 TO " + toQuery + "T23\\:59\\:59.999]"; filterQuery += " +@cm\\:" + dateField + ":[" + fromQuery + "T00\\:00\\:00.000 TO " + toQuery + "T23\\:59\\:59.999]";
if (onlySelf) if (onlySelf)
{ {
@@ -161,24 +155,14 @@ var Filters =
break; break;
case "editingMe": case "editingMe":
filterQuery = "+PATH:\"" + parsedArgs.rootNode.qnamePath; filterQuery = this.constructPathQuery(parsedArgs);
if (parsedArgs.nodeRef == "alfresco://sites/home")
{
filterQuery += "/*/cm:documentLibrary";
}
filterQuery += "//*\"";
filterQuery += " +ASPECT:\"workingcopy\""; filterQuery += " +ASPECT:\"workingcopy\"";
filterQuery += " +@cm\\:workingCopyOwner:\"" + person.properties.userName + '"'; filterQuery += " +@cm\\:workingCopyOwner:\"" + person.properties.userName + '"';
filterParams.query = filterQuery; filterParams.query = filterQuery;
break; break;
case "editingOthers": case "editingOthers":
filterQuery = "+PATH:\"" + parsedArgs.rootNode.qnamePath; filterQuery = this.constructPathQuery(parsedArgs);
if (parsedArgs.nodeRef == "alfresco://sites/home")
{
filterQuery += "/*/cm:documentLibrary";
}
filterQuery += "//*\"";
filterQuery += " +ASPECT:\"workingcopy\""; filterQuery += " +ASPECT:\"workingcopy\"";
filterQuery += " -@cm\\:workingCopyOwner:\"" + person.properties.userName + '"'; filterQuery += " -@cm\\:workingCopyOwner:\"" + person.properties.userName + '"';
filterParams.query = filterQuery; filterParams.query = filterQuery;
@@ -199,13 +183,7 @@ var Filters =
if (filterQuery.length > 0) if (filterQuery.length > 0)
{ {
filterQuery = "+(" + filterQuery + ") "; filterQuery = "+(" + filterQuery + ") " + this.constructPathQuery(parsedArgs);
filterQuery += "+PATH:\"" + parsedArgs.rootNode.qnamePath;
if (parsedArgs.nodeRef == "alfresco://sites/home")
{
filterQuery += "/*/cm:documentLibrary";
}
filterQuery += "//*\"";
} }
else else
{ {
@@ -227,12 +205,7 @@ var Filters =
{ {
filterData = filterData.slice(0, -1); filterData = filterData.slice(0, -1);
} }
filterQuery = "+PATH:\"" + parsedArgs.rootNode.qnamePath; filterQuery = this.constructPathQuery(parsedArgs);
if (parsedArgs.nodeRef == "alfresco://sites/home")
{
filterQuery += "/*/cm:documentLibrary";
}
filterQuery += "//*\"";
filterParams.query = filterQuery + " +PATH:\"/cm:taggable/cm:" + search.ISO9075Encode(filterData) + "/member\""; filterParams.query = filterQuery + " +PATH:\"/cm:taggable/cm:" + search.ISO9075Encode(filterData) + "/member\"";
break; break;
@@ -259,5 +232,20 @@ var Filters =
} }
return filterParams; return filterParams;
},
constructPathQuery: function constructPathQuery(parsedArgs)
{
var pathQuery = "";
if (parsedArgs.nodeRef != "alfresco://company/home")
{
pathQuery = "+PATH:\"" + parsedArgs.rootNode.qnamePath;
if (parsedArgs.nodeRef == "alfresco://sites/home")
{
pathQuery += "/*/cm:documentLibrary";
}
pathQuery += "//*\"";
}
return pathQuery;
} }
}; };