I still don't know the search API as well as I might. But I believe that the 
first problem is that functions are described by a local-name and a namespace. 
You've only supplied the local-name "custom-snippet" and not the namespace 
"http://www.w3.org/2005/xquery-local-functions";. I wasn't sure how to do this, 
so I checked http://developer.marklogic.com/pubs/4.2/books/search-dev-guide.pdf 
and found an example in 2.1.7 "Search Customization Via Options and Extensions".

  <options xmlns="http://marklogic.com/appservices/search";>
    <transform-results apply="custom-snippet"
     ns="http://www.w3.org/2005/xquery-local-functions"/>
  </options>

This throws a new error:

  SEARCH-BADEXTENSION: (err:FOER0000) Extensions must define @apply, @ns and @at

We're making progress, but @at seems to be the library module location (eg, 
'/lib.xqy'). So it looks like you have to put the function into a library 
module. The function can't be defined in the cq textarea, because that area 
needs to define a main module. Even if cq could define a library module, it 
wouldn't have a location for transform-results to refer to.

-- Mike

On 10 Aug 2011, at 10:05 , Mattio Valentino wrote:

> I was trying to test adding my own search snippeting function using
> the search:search API but ran into some trouble trying to use it in
> cq. I was trying to keep the custom function in the same main module
> as the search itself. I keep getting the error:
> 
> [1.0-ml] SEARCH-APPLYUNDEFINED: (err:FOER0000) Value of @apply
> undefined: custom-snippet
> 
> Is there a trick to make this work in the same module in cq or does
> the custom function have to be in a separate file with @ns and @at
> defined?
> 
> The query is below.
> 
> Thanks!
> 
> xquery version "1.0-ml";
> import module namespace
> search="http://marklogic.com/appservices/search"; at
> "/MarkLogic/appservices/search/search.xqy";
> 
> declare function local:custom-snippet(
>  $result as node(),
>  $ctsquery as schema-element(cts:query),
>  $options as element(search:transform-results)?
> ) as element(search:snippet)
> {
>  (:search:snippet($result, $ctsquery, $options):)
>  <search:snippet/>
> };
> 
> search:search("blue",
>  <options xmlns="http://marklogic.com/appservices/search";>
>    (: I've tried multiple variations of this node :)
>    <transform-results apply="custom-snippet"/>
>  </options>
> )
> _______________________________________________
> 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