未过滤的通配符 cts:element-value-query 给出错误结果

问题描述 投票:0回答:1

我从 cts:element-value-query 中得到了许多错误的搜索结果,其中包含 “未过滤”“空白敏感”“通配符”选项。 我想知道解释。 (过滤后的 CTS 搜索似乎工作正常。如果我删除“空白敏感”,它似乎可以工作)

这里是我要查找的目标元素值'ABC/DE 123/FG HI12'

xquery version "1.0-ml";

(:Case 1:)
let $term1 := 'ABC/DE 123'

(:Case 2:)
let $term2 := 'ABC/DE 123*'

(:Case 3:)
let $term3 := 'ABC/DE 123 *'

(:Case 4:)
let $term4 := 'ABC/DE 123* '

(:Case 5:)
let $term5 := 'ABC/DE 123* *'


let $queries := cts:and-query((cts:element-value-query(fn:QName("","name"), $term2, ("case-insensitive","diacritic-sensitive","punctuation-sensitive","whitespace-sensitive", "wildcarded","lang=en"), 1), cts:collection-query("http://marklogic.com/collections/dls/latest-version")))


return 
xdmp:plan(cts:search(fn:doc(), $queries, 'unfiltered'))

这是案例2和案例3的查询计划。 我的问题是为什么它们不同。

case2

case3

marklogic
1个回答
0
投票

计划有所不同,因为通配符位于不同的位置,并且使用

cts:element-value-query
通配符匹配不会跨越单词边界。

  • 对于情况 2
    ABC/DE 123*
    ,通配符用于以
    123
    开头的“单词”。
  • 对于情况 3
    ABC/DE 123 *
    ,它将查找
    123
    ,然后
    *
    匹配其后面的所有内容。

cts:element-value-query
中有一条关于通配符的注释解释:

  • 请注意,
    cts:element-value-query
    中值的文本内容与
    cts:word-query
    中的短语相同,其中短语是元素值。因此,任何通配符和/或词干规则都被视为短语。例如,如果您的元素值为“hellofriend”并且为查询启用了通配符,则“he*”的
    cts:element-value-query
    将不匹配,因为通配符匹配不跨越单词边界,而“he*”的
    cts:element-value-query
    则不匹配。你好”将匹配。搜索“”将匹配,因为“*”通配符本身被定义为匹配该值。同样,词干规则应用于每个术语,因此当为查询启用词干提取时,搜索“hello Friends”将会匹配,因为“friends”与“friend”匹配。

此外,通配符搜索规则中的一些相关要点:

  • 空格用作分词符,通配符匹配仅在单个单词内有效。例如,
    m*th*
    将匹配
    method
    ,但不匹配
    meet there
  • 如果使用非通配符指定
    *
    通配符,它将在值词典查询中匹配(例如,
    cts:element-value-match
    ),但在值查询中不匹配(例如,
    cts:element-value-query
    )。例如,
    m*
    将匹配值词典搜索的值
    meet me there
    (例如,
    cts:element-value-match
    ),但不会匹配值查询搜索的值(例如,
    cts:element-value-query
    ),因为值查询只匹配一个单词。对
    m* *
    的值搜索将匹配该值(因为
    m*
    匹配第一个单词,
    *
    匹配其后的所有内容)。
  • 如果查询具有
    whitespace-sensitive
    选项,则空格将被视为单词字符。这对于匹配通配符值查询中的空格非常有用。您也可以在通配符单词查询中使用
    whitespace-sensitive
    选项,尽管它可能没有多大意义,因为它会比您预期的匹配更多。
© www.soinside.com 2019 - 2024. All rights reserved.