Localization 标记逻辑中的本地化
我在MarkLogic(在7.0-1上测试)和通配符搜索中遇到了本地化问题 例如:Localization 标记逻辑中的本地化,localization,wildcard,marklogic,Localization,Wildcard,Marklogic,我在MarkLogic(在7.0-1上测试)和通配符搜索中遇到了本地化问题 例如: let $x := <root> <el xml:lang="en">hello</el> <el xml:lang="fr">hello</el> </root> return $x//el[cts:contains(., cts:word-query("hello*", ("wildcarded", "lang=fr")))] 让$
let $x :=
<root>
<el xml:lang="en">hello</el>
<el xml:lang="fr">hello</el>
</root>
return
$x//el[cts:contains(., cts:word-query("hello*", ("wildcarded", "lang=fr")))]
让$x:=
你好
你好
返回
$x//el[cts:contains(,cts:word查询(“hello*”,(“wildcarded”,“lang=fr”))]
当我从的“hello*”
中删除星号时,为什么它会返回两个元素el而不是一个带有xml:lang=“fr”
的元素呢
如何在通配符搜索中使用本地化?MarkLogic对带词干的搜索使用依赖于语言的索引,但对未带词干的搜索不使用。而通配符搜索是针对与语言无关的未排序索引执行的 本节解释了语言意识如何在MarkLogic中工作,并说明: 所有搜索都使用cts:query构造函数中的语言设置来确定如何标记搜索词。词干搜索还使用语言设置派生词干。未分段搜索使用指定的语言进行标记化,但使用与语言无关的未分段(单词搜索)索引 本节直接涉及通配符和词干搜索,并说明: 系统不会对通配符的单词执行词干搜索 我认为你基本上有两个选择:
- 您可以在之后手动筛选,但由于错误语言的误报,这可能会导致过高的估计
- 或者,您可以使用单词词典查找显式值,并将其作为序列传递给cts:word查询
let $x :=
<root>
<el xml:lang="en">hello</el>
<el xml:lang="fr">hello</el>
</root>
return
$x//el[cts:contains(., cts:word-query(cts:words("hell"), ("lang=fr")))]
让$x:=
你好
你好
返回
$x//el[cts:contains(,cts:word查询(cts:words(“hell”),(“lang=fr”)]
请注意,后者确实要求您启用单词词典,并且cts:words返回的值来自数据库中的文档
嗯 MarkLogic的主要功能包括:
- 英式
- 法语的
- 意大利人
- 德文
- 俄罗斯人
- 西班牙文
- 阿拉伯文
- 中文(简体和繁体)
- 韩国人
- 波斯语(波斯语)
- 荷兰语
- 日文
- 葡萄牙人
- 挪威语(尼诺尔斯克和博克马尔语)
- 瑞典人
使用这些语言,词干搜索和索引可以像您预期的那样工作。感谢您的回复!我可能会借助searchable expression选项和xml:lang属性手动过滤它。我的使用案例是使用通配符搜索来模拟捷克语的词干,因为捷克语的后缀非常多变。使用可搜索表达式听起来也可行,尽管可能需要过滤搜索,但估计可能会出现误报。但是值得一试,也许您可以尝试使用fn:lang()而不是检查xml:lang。。