当与field-value-query搜索一起使用时,我会得到错误的结果。
我将用下面的样本数据来解释这个问题。
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>即使我运行cts查询时只有一个field-value-query,如下所示,结果也是相同的(条目的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
索引设置:(两个字段相同)

注意:对于过滤搜索,它运行良好。
请帮助我理解为什么这种意想不到的行为和我能做什么来纠正它。
Tried:
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"
)发布于 2017-03-28 15:01:04
在isbn元素上用cts: element ()包装您的cts:and-query。以下是我的意思近似值:
cts:search(
fn:doc()/book//entry,
cts:element-query(xs:QName("isbn"),
cts:and-query((
cts:element-value-query(xs:QName("hbk"), "1234567", ("case-insensitive")),
cts:element-value-query(xs:QName("pbk"), "222222", ("case-insensitive"))
))
),
"unfiltered"
) 发布于 2017-03-28 15:25:47
未筛选返回匹配片段中的第一个元素。要获得您想要的结果,您需要使用过滤的结果或重新建模您的数据或使用片段根。反转元素的顺序,您就会看到--它始终是可搜索表达式中返回的第一个元素。这就是片段的性质和过滤的vs未经过滤的。
https://stackoverflow.com/questions/43071027
复制相似问题