The admin UI uses xdmp:forest-status and xdmp:forest-counts to build that 
display. Take a look at Admin/lib/forest-status-form.xqy

-- Mike

On 30 Apr 2013, at 08:56 , Stephane Toussaint <[email protected]> 
wrote:

> Thanks for the reply Mike.
> 
> Actually I don't really rely on a database-get-range-element-indexes every 
> time I build my search option node. But I have some kind of configuration 
> where a user (from a front end) could say... Hey I want this element as a 
> search constraints.
> This is this information that I get to check what indexes are needed for the 
> given request. Currently what my workaround allow me is to actually process 
> the search but without proposing the requested facets element because it is 
> not really enable. I don't wan't to bloc the search until everything fine.
> 
> It's clear that the try-catch check is not the good way to to this. I will 
> however try to get it more robust checking the actual exception and 
> rethrowing if I need to as you told.
> 
> I'd give a try to xdmp:forest-status and indeed it give me some informations 
> (currently indexing), but it not able to give me why it is reindexing. It be 
> cool if those informations readable from the Database status page could be 
> retrieve with the admin: API.
> 
>> Task                                                         QName           
>>         Fragments Remaining     Documents Remaining     % Done
>> Reindexing for Range Element Index<varspace.gif>     [string] 
>> :titrecourt<varspace.gif>      31,858<varspace.gif>                          
>>           n/a<varspace.gif>                                               
>> 1.2%
> <varspace.gif>
> 
> Thank you for your hints.
> 
> Stéphane
> 
> 
> 
> Le 30 avr. 2013 à 17:20, Michael Blakeley <[email protected]> a écrit :
> 
>> Normally folks use a statically-defined configuration for facets. So any 
>> code that will use a new index isn't deployed until the index is ready.
>> 
>> Are you pulling the range index config from the admin API because you 
>> dislike copying it into a static configuration? Or is there a functional 
>> reason to introspect the index configuration at run time?
>> 
>> If you really have to block until the new index is ready, it might be more 
>> robust to use xdmp:forest-status. After all the try-catch check does not 
>> know *why* the cts:element-values call failed. So you might get bad 
>> information. At the very least I would check $e/error:code and potentially 
>> call xdmp:rethrow. But I think xdmp:forest-status is better. Depending on 
>> its output you might then call http://docs.marklogic.com/xdmp:forest-counts 
>> for details of the reindexing in progress. Remember that forests will go 
>> into reindexing state frequently, just to see if there is any work to do. 
>> Your code will have to discriminate between that and "real" reindexing.
>> 
>> Another option is to set 
>> http://docs.marklogic.com/admin:database-set-index-detection to 'none'. This 
>> means your cts:element-values call will work as soon as the database 
>> configuration knows about it. However the results will only reflect the 
>> available index entries. That is, the results will be incomplete until 
>> reindexing has finished.
>> 
>> -- Mike
>> 
>> On 30 Apr 2013, at 07:18 , Stephane Toussaint 
>> <[email protected]> wrote:
>> 
>>> Hi,
>>> 
>>> I dynamically compute the options node to propose to the search api. But I 
>>> can't handle one case.
>>> Say I create a new Element Range Index to provide a new facets to my 
>>> search. If I retrieve Element Range Index information from my database 
>>> configuration using :
>>> 
>>>> import module namespace admin = "http://marklogic.com/xdmp/admin"; at 
>>>> "/MarkLogic/admin.xqy";
>>>>            
>>>> let $config := admin:get-configuration()
>>>> return admin:database-get-range-element-indexes($config, 
>>>> xdmp:database("MyDatabase"))
>>> 
>>> The new Range Element Index is well defined and then I decide to use it for 
>>> my search operation.
>>> 
>>> Because my database has grown up, the time this new index is actually 
>>> complete may be important, it then results in an XDMP-ELEMRIDXNOTFOUND 
>>> exception, which is normal because the index is not actually complete.
>>> 
>>> The question is then. How to ensure that indexes defined in the 
>>> configuration are actually usable ?
>>> 
>>> Currently I try to fix this issue with this workaround, but :
>>> - I don't like to rely on exception for such a feature
>>> - This function does not handle enforce that the index exists with required 
>>> type (dateTime, string, etc.)
>>> 
>>>> declare function local:isIndexActive($localname as xs:string, $namespace 
>>>> as xs:string?, $collation as xs:string?) as xs:boolean {
>>>>  try {
>>>>    cts:element-values(fn:QName($namespace, $localname), (), ("limit=0", if 
>>>> ($collation) then fn:concat("collaction=", $collation) else ())),
>>>>    fn:true()
>>>>  } catch ($e) {
>>>>    fn:false()
>>>>  }
>>>> };
>>> 
>>> Do you know of something more accurate ?
>>> 
>>> Thanks
>>> Stéphane
>>> 
>>> _______________________________________________
>>> 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