MarkLogic 8 在 JSON 元素中搜索不区分大小写 - XQuery

MarkLogic 8 Search case insensitive in the JSON elements - XQuery

当前记录

{"myLabel":"AFRICANA"}
{"myLabel":"africans"}
{"myLabel":"AFRICAN"}
{"myLabel":"Africa"}

查询:`cts:json-属性-word-match("myLabel", "Africa*")`
结果: {"myLabel":"Africa"}
查询 returns 只匹配大小写数据而不是所有相关行。

查询:`cts:json-属性-word-match("myLabel", "Africa*", "case-insensitive")`
结果: 您的查询返回一个空序列
如果我使用 "case-insensitive" 选项它 returns 空序列。

我已将词库设置为 myLabel。 如何不区分大小写地搜索 JSON 数据?

这两个示例都为我提供了 return 预期的结果。您是否打算将第二个查询显示为 cts:json-property-value-query() 的搜索?

如果是这种情况,那么应用 wildcarded 选项将确保匹配的值不区分大小写并作为通配符查询:

cts:search(doc(), 
  cts:json-property-value-query("myLabel", "Africa*", ("wildcarded","case-insensitive")))

仔细检查您是否启用了 "trailing wildcard searches",或者是否为您的内容数据库启用了三个、两个或一个字符搜索中的任何一个。 rules for wildcard searches 声明您需要为查询启用特定的数据库索引,以自动将具有通配符模式的查询应用为通配符查询:

If neither "wildcarded" nor "unwildcarded" is present, the database configuration and $text determine wildcarding. If the database has any wildcard indexes enabled ("three character searches", "two character searches", "one character searches", or "trailing wildcard searches") and if $text contains either of the wildcard characters '?' or '*', it specifies "wildcarded". Otherwise it specifies "unwildcarded".

启用这些索引设置后,带有 * 的查询词应作为通配符查询自动执行,您可以删除显式 wildcarded 选项:

cts:search(doc(), 
  cts:json-property-value-query("myLabel", "Africa*", "case-insensitive"))