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