2013-01-23 3 views
0

je suit le fichier xmlObtenir mauvais résultat avec EVC: élément gamme requête et EVC: élément attribut gamme requête

<data> 
<element attribute="10">element1</element> 
<element attribute="7">element2</element> 
</data> 

J'ai créé l'indice de gamme d'éléments sur « élément » et l'attribut index de plage sur « attribut » et essayé d'exécuter requête suivante:

cts:search(collection(), cts:and-query((
cts:element-range-query(xs:QName("element"), "=", "element1") 
cts:element-attribute-range-query(xs:QName("element"), xs:QName("attribute"), "<=", 7) 

))) 

maintenant, ce me donner ci-dessus fragment comme résultat, mais en fait attribuer des « element1 » est 10, qui est plus de 7, de sorte accordinly ci-dessus fragment ne devrait pas venir à la suite.

Aidez-nous s'il vous plaît.

Répondre

4

La requête fait ce qu'elle devrait faire. Il correspond aux fragments pour lesquels element = element1 et element/@ attribute < = 7. Ces deux instructions sont vraies pour l'exemple XML. Elles ne sont pas vraies pour le même élément dans ce fichier XML, mais la requête ne le garantit pas.

L'astuce ici est de se rappeler que les index pointent vers des fragments. En général, cela signifie qu'un document entier correspond ou non. http://docs.marklogic.com/guide/search-dev/count_estimate#id_63216 touche à ce sujet, et http://developer.marklogic.com/blog/fragmented-thoughts pourrait aider aussi. Obtenir les résultats que vous voulez peut impliquer faire quelque chose d'intelligent en activant divers index de position et en enveloppant votre requête dans un cts:element-query. Vous pouvez également reconsidérer les noms de vos noeuds afin qu'ils soient uniques pour cette requête. Ou vous pourriez envisager de définir une racine de fragment - mais je considère cela comme un dernier recours.