If I understood you right, what you want is:
let $query := cts:word-query ("ADENOHYPOPHYSEAL HORMONES", "GROWTH", ...)
for $result in cts:search ( , $query)
return cts:highlight ($result, $query, <match>$cts:text</match>)
and then arrange for <match> nodes to be highlighted in your output?
You'd guest a list of (whatever you searched for - documents?) with the
highlighting applied...
I'm confused because you seem to have already written that almost, so
maybe I'm missing something?
maybe what you're looking for is more consolidated output like:
return <result uri="{base-uri($result)}">{cts:highlight ( ... ) //
hit}</result> ?
-Mike
Lee, David wrote:
This is a refinement on the question I asked the other day. I'm
getting better at formulating my questions so maybe the advise might
be closer :)
Suppose I do a query and get a XML document which has a field that has
text that looks like this :
"The anterior glandular lobe of the pituitary gland, also known as the
adenohypophysis. It secretes the ADENOHYPOPHYSEAL HORMONES that
regulate vital functions such as GROWTH; METABOLISM; and REPRODUCTION."
Those things in all upper case are likely terms that exist in other
documents.
What I'd like to do is to do a search for each of those terms across
the entire DB, and if found, create links to either the highest scored
find, or to a results page (either will do).
I've poked around and found many little things that are part of a
possible solution, but nothing that does exactly what I want.
For example: cts:hilight() could be used to add the links to the words.
and I could find a consolidated result set by using
cts:search( ... , cts:word-query ( fn:tokenize(phrase) ) )
to find all matches etc. I an easily get all the upper case words
and create a search.
But my problem is this. Suppose I create a search on all the upper
case words ("ADENOHYPOPHYSEAL" , "GROWTH" , "METABOLISM")
and get a result back with cts:search()
How can I match up Which nodes of the result matched which word so I
can hilight them ?
e.g if I did
for $result in cts:search( ..... all the words )
// Which word did $result match ???
My only thing I can think of is that i would have to iteratively loop
through the terms and do a search one by one.
for $word in ( big oh list of search words )
for $result in cts:search( ... , $word )
cts:hilight( $phrase , $word , { link the word } )
My guess is that this will perform horribly. I'd rather get a
single consolidated search then do some magic like
for $result in cts:search( ... , all the words )
cts:hilight( $phrase , the word that matched $result )
Does this make any sense ? Is there an API or design pattern to do
this ? Or should I do the outer loop instead ?
I looked at cts:walk but it looked like it to use it for this would
still involve looping on the cts:search() for each term matched.
Thanks for any advise.
----------------------------------------
David A. Lee
Senior Principal Software Engineer
Epocrates, Inc.
[email protected] <mailto:[email protected]>
812-482-5224
------------------------------------------------------------------------
_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general
_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general