在 MarkLogic 中排序时如何忽略 "stop words"?

How to ignore "stop words" while sorting in MarkLogic?

有什么办法可以在排序时忽略"stop words"

例如: 我有这样的词

dixit

singla

the marklogic

descending 排序结果应该是 singlathe marklogicdixit

如上例the被忽略。

有什么方法可以实现吗?

更新:

停用词可以出现在任何地方。 例如

the MarkLogic

MarkLogic is the best

the MarkLogic is awesome

排序时不要考虑文本中的任何停用词。

以上只是一个小例子来说明问题。

实际上我使用的是search:searchAPI。 对于排序,我使用 sort-order 搜索选项。 我必须对其执行排序的元素是动态的。大约有 30-35 个元素。

有什么方法可以在这个级别自定义排序规则,比如配置一些在排序时将被忽略的词(停用词)。

如果我对你的问题的理解正确,那么你在对结果集进行排序时试图去掉定冠词。

为此,您需要使用一些附加功能并创建 'sort' 条件。我的解决方案看起来像这样(我还包括一些示例文档,以便您可以通过复制粘贴来测试它):

(:
xdmp:document-insert("/peter.xml", <person><firstName>Peter</firstName><lastName>O'Toole</lastName><age>60</age></person>);
xdmp:document-insert("/john.xml", <person><firstName>John</firstName><lastName>Adams</lastName><age>18</age></person>);
xdmp:document-insert("/simon.xml", <person><firstName>Simon</firstName><lastName>Petrov</lastName><age>22</age></person>);
xdmp:document-insert("/mark.xml", <person><firstName>Mark</firstName><lastName>the Lord</lastName><age>25</age></person>);
:)

for $person in /person
let $sort := fn:reverse(fn:tokenize($person/lastName, ' '))[1]
order by $sort
(: return $person :)
return $person/lastName/text()

请注意,现在排序顺序为

 - Adams
 - the Lord
 - O'Toole
 - Petrov

希望对您有所帮助。

没有标准的归类 URI 可以为您执行此操作(至少 none 我见过)。当然,您可以通过对函数调用的结果进行排序来动态地执行此操作,但是如果您希望它大规模有效地完成(并且可供 search:search 使用),那么您需要将可排序的字符串具体化到您的文档中.我经常将此作为元素的属性来完成:

<title sortable="Great Gatsby, The">The Great Gatsby</title>

然后在 title/@sortable 属性上放置一个范围索引。

您还可以使用 "envelope pattern",其中像这样的具体化元数据保存在其自己的文档部分中,原始文件保存在其自己的部分中。对于这样的事情,我认为直接装饰元素会更优雅一些,以保持上下文。