Hi, Basavaraj:

The element word, value, and range positions are all configured separately.  
Since you're using element range queries, you would have to turn on element 
range value positions (which are configured on the same form that creates the 
element range index).

>From your answer, it sounds like you turned on element word positions, but 
>maybe I'm misreading.


Erik Hennum

________________________________
From: [email protected] 
[[email protected]] on behalf of Basavaraj Kalloli 
[[email protected]]
Sent: Friday, July 24, 2015 8:13 AM
To: MarkLogic Developer Discussion
Subject: Re: [MarkLogic Dev General] False positives with element-query


Hi Erik

Yeap we did try the position indexes for element and word positions but that 
still doesn't solve it. I believe Marklogic doesn't have any hierarchical 
indexes as in indexes for values located within the same element.

On Jul 24, 2015 6:04 PM, "Erik Hennum" 
<[email protected]<mailto:[email protected]>> wrote:
Hi, Basavaraj:

The best approach if at all possible is to put each size data row in a separate 
document instead of putting a size data table in a document.  That's a general 
recommendation for MarkLogic: treat a document as a row and a collection as a 
table.  Then, the unfiltered indexes will yield the rows you want.

Did you try turning on range value positions for your range indexes?


Hoping that helps,


Erik Hennum

________________________________
From: 
[email protected]<mailto:[email protected]>
 
[[email protected]<mailto:[email protected]>]
 on behalf of Basavaraj Kalloli 
[[email protected]<mailto:[email protected]>]
Sent: Friday, July 24, 2015 3:04 AM
To: MarkLogic Developer Discussion
Subject: [MarkLogic Dev General] False positives with element-query

Hi,

We have a requirement where we need to search for min and max values which 
should occur within an element

For eg:


<SIZES>
   <SIZEDATA>
      <SIZE>12000</SIZE>
      <SIZE_MIN>12000</SIZE_MIN>
      <SIZE_MAX>12000</SIZE_MAX>
   </SIZEDATA>
   <SIZEDATA>
      <SIZE>3500</SIZE>
      <SIZE_MIN>3500</SIZE_MIN>
      <SIZE_MAX>3500</SIZE_MAX>
   </SIZEDATA>
</SIZES>

Given the above xml we need to search for min and max values in the range: 4000 
and 5000. Now we have a element-query as:


import module namespace search = "http://marklogic.com/appservices/search"; at 
"/MarkLogic/appservices/search/search.xqy";

let $size-min-query := cts:element-range-query(xs:QName("SIZE_MIN"),
                "<=", xs:double(4000), (), 0)
let $size-max-query := cts:element-range-query(xs:QName("SIZE_MAX"),
                ">=", xs:double(5000), (), 0)
let $and-query := cts:and-query(($size-min-query, $size-max-query))
let $q := cts:element-query(xs:QName("SIZEDATA"), $and-query)
let $options :=
    <options xmlns="http://marklogic.com/appservices/search";>
        <search-option>unfiltered</search-option>
        <return-results>true</return-results>
    </options>

return search:resolve(<q>{$q}</q>/node(), $options)


If we run the above query this returns the document but ideally it shouldnt 
because the element's i.e SIZEDATA doesnt satisfy the range. If I change the 
options to use filtered search this works. We tried setting up element 
positions and word positions to on but still we still have false positive.

Any pointers or any other indexes which can help us?

_______________________________________________
General mailing list
[email protected]<mailto:[email protected]>
Manage your subscription at:
http://developer.marklogic.com/mailman/listinfo/general

_______________________________________________
General mailing list
[email protected]
Manage your subscription at: 
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to