field-value-query
与搜索一起使用时,我得到了错误的结果'unfiltered'
。
我将用下面给出的示例数据来解释问题。
XML:
<book>
<name>Dixit</name>
<age>25</age>
<entry>
<isbn>
<type>hbk</type>
<value>1234567</value>
</isbn>
<isbn>
<type>pbk</type>
<value>111111</value>
</isbn>
</entry>
<entry>
<isbn>
<type>hbk</type>
<value>1234567</value>
</isbn>
<isbn>
<type>pbk</type>
<value>222222</value>
</isbn>
</entry>
</book>
以上xml可以有多个<entry>
元素。但是两个或更多<entry>
不能有相同<type>
的。
我希望所有条目都具有一种或多种isbn
类型、值的组合。
如上例所示。我想要<entry>
两者兼得hbk:1234567 AND pbk:111111
为了实现这一点,我正在运行以下cts:query
cts:search(
fn:doc()/book//entry,
cts:and-query((
cts:field-value-query("hbk", "1234567", ("case-insensitive")),
cts:field-value-query("pbk", "222222", ("case-insensitive"))
)),
"unfiltered"
)
输出:
<entry>
<isbn>
<type>hbk</type>
<value>1234567</value>
</isbn>
<isbn>
<type>pbk</type>
<value>111111</value>
</isbn>
</entry>
据我说,上面的输出是错误的,因为它应该在下面返回<entry>
。
<entry>
<isbn>
<type>hbk</type>
<value>1234567</value>
</isbn>
<isbn>
<type>pbk</type>
<value>222222</value>
</isbn>
</entry>
即使我只使用field-value-query
下面给出的一个运行 cts 查询,也会得到相同的结果(pbk值为111111的条目)
cts:search(
fn:doc()/book//entry,
cts:field-value-query("pbk", "222222", ("case-insensitive")),
"unfiltered"
)
我创建的字段:
pbk : /book/entry/isbn[./type = 'pbk']/value
hbk : /book/entry/isbn[./type = 'hbk']/value
索引设置:(两个字段相同)
注意:对于过滤搜索,它工作正常。
请帮助我理解为什么会出现这种意外行为以及我可以做些什么来纠正它。
试过:
cts:search(
fn:doc()/book//entry,
cts:element-query(
fn:QName('','isbn'),
cts:and-query((
cts:field-value-query("hbk", "1234567", ("case-insensitive")),
cts:field-value-query("pbk", "222222", ("case-insensitive"))
))
),
"unfiltered"
)