フィルタリングされていない検索が間違った結果を示しています。MarkLogicの "フィルタリングされていない"検索の予期しない動作
下記のxmlサンプルと問題をご覧ください。
サンプル:私は<entry>
ノードの下に提示しなければならない<volume> & <issue>
両方の値の組み合わせを持つエントリノードを取得する必要が
<root>
<id1>11</id1>
<elem1>ee1</elem1>
<ele2>ee2</ele2>
<entry>
<volume>10</volume>
<issue>10</issue>
<elemEntry>eleme</elemEntry>
</entry>
<entry>
<volume>20</volume>
<issue>20</issue>
<elemEntry>eleme</elemEntry>
</entry>
<entry>
<volume>20</volume>
<issue>10</issue>
<elemEntry>eleme</elemEntry>
</entry>
<entry>
<volume>10</volume>
<issue>20</issue>
<elemEntry>eleme</elemEntry>
</entry>
</root>
(のような:体積10 &問題-10、ボリューム10 &問題-20)
上記の例と同様に、エントリノード全体を<volume> (10), <issue> (10)
とする必要があります。
他のエントリノードが必要なvolume
(値10)、issue
(値10)の組み合わせを持たないので、他のエントリノードを返すべきではありません。
下記のcts:search
をご覧ください。
cts:search(
doc("/sample.xml")//entry,
cts:and-query((
cts:element-value-query(xs:QName("volume"), "10", ("case-insensitive","unstemmed")),
cts:element-value-query(xs:QName("issue"), "10", ("case-insensitive","unstemmed"))
)),
"unfiltered"
)
は、サンプルXMLは、問合せの上に/sample.xml
URI
でDBに格納されたとも私に他のエントリ(<entry>
)を返しています。
"フィルタリング済み"検索を実行すると、上記のクエリで正しい結果が返されます。
どうして起こっているのか、何が解決策になるのか教えてください。
volume and issue
の組み合わせを持つエントリノードを取得する他の方法がある場合は、お知らせください。
インデックス「要素値の位置」を有効にしてみてください。 – wst
@wst既に "true"に設定されていますが、依然として問題に直面しています。 –
私は正確に覚えていませんが、単語の位置と要素の単語の位置を試してみることもできます。さもなければ、私はインデックスから、そしてフィルタリングされていないクエリから解決できるものを使い果たし、データを改造する必要があると思います。 – wst