Thanks, Michael - my sense is we have an order of magnitude fewer 
directories than uris in a particular customer install where there is a 
current problem, so it's probably  worth a look.

-Mike

On 01/17/2013 12:42 PM, Michael Blakeley wrote:
> As of ML6 those URI range indexes aren't so hidden anymore. You can use 
> http://docs.marklogic.com/cts:uri-reference and 
> http://docs.marklogic.com/cts:collection-reference directly with 
> http://docs.marklogic.com/cts:value-tuples or 
> http://docs.marklogic.com/cts:value-co-occurrences in supported code. I'm not 
> sure how that helps with the directory facet, though.
>
> This might be a case where directory fragments help, despite my usual 
> aversion to them. I'm thinking about a hybrid approach where you have many 
> matches and relatively few directories. If you could enumerate the 
> directories you could test each one with xdmp:exists().
>
>      ...
>      for $directory-uri in $list
>      where xdmp:exists(
>        cts:search(
>          collection(),
>          cts:and-query(
>            ($user-query, cts:directory-query($directory-uri, 'infinity')))))
>
> You could hard-code $list if your directory structure happens to be fixed, 
> but that isn't likely. If you can tolerate the extra locking from 
> directory-creation=automatic, or if can you manually create the directories 
> you use, then this works:
>
>      let $list := cts:uris(
>        (), 'properties',
>        cts:element-query(xs:QName('prop:directory'), cts:and-query(())))
>      ...
>
> I'd expect that approach to be O(n) with the number of directories, which 
> might be better than a pure document-uri approach in some situations.
>
> -- Mike
>
> On 17 Jan 2013, at 09:06 , James Fuller<[email protected]>  wrote:
>
>    
>> somewhat related ... there are 2 hidden indexes in MarkLogic;
>>
>>   xdmp:document (uris enabled)
>>
>>   xdmp:collection (collection uris enabled)
>>
>> which you might be able to leverage. The canonical example for these indexes 
>> are as follows; which returns all uris along with their collection;
>>
>>      
>> cts:element-value-co-occurrences(xs:QName("xdmp:collection"),xs:QName("xdmp:document),"map")
>>
>> as this is hidden, I make no claims on support (as in there is none) ... but 
>> thought it might be useful
>>
>> hth, Jim Fuller
>>
>>
>>
>> On Thu, Jan 17, 2013 at 3:44 PM, Michael Sokolov<[email protected]>  
>> wrote:
>> Yeah - thanks Geert and Damon: I think you've confirmed for me that
>> there is no directory-faceting as such, but that I can process all the
>> matching uris, which was going to be my fallback.  My guess is this
>> should be acceptable for<  100K matches or so
>>
>> -Mike
>>
>> On 1/17/2013 12:37 AM, Damon Feldman wrote:
>>      
>>> Mike,
>>>
>>> This is moderately efficient, so may work depending on your use case and 
>>> the number of matching uris:
>>>
>>> declare namespace functx = "http://www.functx.com";;
>>> declare function functx:substring-before-last-fslash($arg as xs:string?)  
>>> as xs:string? {
>>>
>>>    let $dir := replace($arg, '^(.*)/.*', '$1')
>>>    return if (ends-with($dir, "/")) then $dir else ()  (: if there is no / 
>>> at all, the replace will have no effect, so check the terminating slash to 
>>> ensure it is a directory :)
>>>
>>>    } ;
>>>
>>>    let $q := ... some query ...
>>>    distinct-values(cts:uris("", (), $q) ! 
>>> functx:substring-before-last-fslash(.))
>>>
>>> Note the "!" operator is a shorthand for a for loop in ML 6. Note the 
>>> function is based on functx, but has the "/" delimiter hard-coded.
>>>
>>> Yours,
>>> Damon
>>> --
>>> Damon Feldman
>>> Sr. Principal Consultant, MarkLogic
>>>
>>> -----Original Message-----
>>> From: [email protected] 
>>> [mailto:[email protected]] On Behalf Of Michael 
>>> Sokolov
>>> Sent: Wednesday, January 16, 2013 10:38 PM
>>> To: General Developer Discussion
>>> Subject: [MarkLogic Dev General] directory facet?
>>>
>>> Is there an efficient way to retrieve all the directories containing the 
>>> documents matching a query, in the way that cts:words does for words?
>>>
>>> -Mike
>>>
>>>
>>> _______________________________________________
>>> General mailing list
>>> [email protected]
>>> http://developer.marklogic.com/mailman/listinfo/general
>>> _______________________________________________
>>> General mailing list
>>> [email protected]
>>> http://developer.marklogic.com/mailman/listinfo/general
>>>        
>> _______________________________________________
>> General mailing list
>> [email protected]
>> http://developer.marklogic.com/mailman/listinfo/general
>>
>> _______________________________________________
>> General mailing list
>> [email protected]
>> http://developer.marklogic.com/mailman/listinfo/general
>>      
> _______________________________________________
> General mailing list
> [email protected]
> http://developer.marklogic.com/mailman/listinfo/general
>    
_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to