如何忽视"停止单词"在MarkLogic中排序?

时间:2017-05-30 13:41:29

标签: sorting marklogic marklogic-8

排序时是否有任何方法可以忽略"stop words"

例如: 我有像

这样的词

dixit

singla

the marklogic

descending顺序排序时,结果应为 singlathe marklogicdixit

如上例所示,the被忽略。

有任何方法可以达到这个目的吗?

更新

在任何地方都可以发生停止词。 例如

the MarkLogic

MarkLogic is the best

the MarkLogic is awesome

虽然排序不应该考虑文本中的任何停用词。

上面只是一个描述问题的小例子。

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

有没有办法在这个级别自定义排序规则,比如配置一些在排序时会被忽略的单词(停用词)。

2 个答案:

答案 0 :(得分:3)

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

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

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

你也可以使用&#34;信封模式&#34;这样的物化元数据保存在文档的各个部分中,原始部分保存在自己的部分中。对于这样的事情,我认为直接装饰元素更加优雅,以保持上下文。

答案 1 :(得分:1)

如果我正确地理解了你的问题,那么你在排序结果集时试图摆脱明确的文章。

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

(:
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

我希望这会有所帮助。