在 MarkLogic 中排序时如何忽略 "stop words"?
How to ignore "stop words" while sorting in MarkLogic?
有什么办法可以在排序时忽略"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 个元素。
有什么方法可以在这个级别自定义排序规则,比如配置一些在排序时将被忽略的词(停用词)。
如果我对你的问题的理解正确,那么你在对结果集进行排序时试图去掉定冠词。
为此,您需要使用一些附加功能并创建 '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",其中像这样的具体化元数据保存在其自己的文档部分中,原始文件保存在其自己的部分中。对于这样的事情,我认为直接装饰元素会更优雅一些,以保持上下文。
有什么办法可以在排序时忽略"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 个元素。
有什么方法可以在这个级别自定义排序规则,比如配置一些在排序时将被忽略的词(停用词)。
如果我对你的问题的理解正确,那么你在对结果集进行排序时试图去掉定冠词。
为此,您需要使用一些附加功能并创建 '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",其中像这样的具体化元数据保存在其自己的文档部分中,原始文件保存在其自己的部分中。对于这样的事情,我认为直接装饰元素会更优雅一些,以保持上下文。