排序时是否有任何方法可以忽略"stop words"
。
例如: 我有像
这样的词 dixit
singla
the marklogic
按descending
顺序排序时,结果应为
singla
,the marklogic
,dixit
如上例所示,the
被忽略。
有任何方法可以达到这个目的吗?
更新
在任何地方都可以发生停止词。 例如
the MarkLogic
MarkLogic is the best
the MarkLogic is awesome
虽然排序不应该考虑文本中的任何停用词。
上面只是一个描述问题的小例子。
实际上我使用的是search:search
API。
对于排序,我使用sort-order
搜索选项。
我必须执行排序的元素是动态的。大约有30-35个元素。
有没有办法在这个级别自定义排序规则,比如配置一些在排序时会被忽略的单词(停用词)。
答案 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
我希望这会有所帮助。