Rest 带运算符的HTTP扩展中的MarkLogic多参数

Rest 带运算符的HTTP扩展中的MarkLogic多参数,rest,parameters,marklogic,operator-keyword,Rest,Parameters,Marklogic,Operator Keyword,我为GET函数提供了MarkLogic REST扩展,它接受一个字符串来执行单词匹配搜索 当我使用/v1/resources/{module}rs:q=bri+或+ade时,MarkLogic将“bri或ade”解释为一个参数: 有什么方法可以让服务扩展像/v1/search一样智能化吗?q=Brit+或+Adele 在没有看到实际代码的情况下,很难提出更改建议。但是,如果只是使用参数值执行搜索: cts:search(doc(), $q) 然后它将为该短语生成一个单词查询:cts:wor

我为GET函数提供了MarkLogic REST扩展,它接受一个字符串来执行单词匹配搜索

当我使用
/v1/resources/{module}rs:q=bri+或+ade
时,MarkLogic将“
bri或ade
”解释为一个参数:




有什么方法可以让服务扩展像
/v1/search一样智能化吗?q=Brit+或+Adele

在没有看到实际代码的情况下,很难提出更改建议。但是,如果只是使用参数值执行搜索:

cts:search(doc(), $q)
然后它将为该短语生成一个单词查询:
cts:wordquery(“bri或ade”)

您可以使用该函数解析
$q
请求参数并生成所需的查询条件:

cts:search(doc(), cts:parse($q))
cts.search(cts.jsonPropertyScopeQuery("firstname", cts.parse(customerName))); 
然后将生成以下查询:

cts:or-query((cts:word-query("bri", ("lang=en"), 1), cts:word-query("ade", ("lang=en"), 1)), ())
要将搜索限制为
firstname
属性,请使用函数:

cts:search(doc(), cts:parse($q))
cts.search(cts.jsonPropertyScopeQuery("firstname", cts.parse(customerName))); 

在没有看到实际代码的情况下,很难提出更改建议。但是,如果只是使用参数值执行搜索:

cts:search(doc(), $q)
然后它将为该短语生成一个单词查询:
cts:wordquery(“bri或ade”)

您可以使用该函数解析
$q
请求参数并生成所需的查询条件:

cts:search(doc(), cts:parse($q))
cts.search(cts.jsonPropertyScopeQuery("firstname", cts.parse(customerName))); 
然后将生成以下查询:

cts:or-query((cts:word-query("bri", ("lang=en"), 1), cts:word-query("ade", ("lang=en"), 1)), ())
要将搜索限制为
firstname
属性,请使用函数:

cts:search(doc(), cts:parse($q))
cts.search(cts.jsonPropertyScopeQuery("firstname", cts.parse(customerName))); 

如果目标是传递查询表达式,Mads建议一个好的解决方案

如果目标是为单个查询构造函数传递多个条件值,那么如果客户端重复rs:qhttp查询参数,q键是否有一个值列表?例如:

/v1/resources/{module}?rs:q=bri&rs:q=ade

希望这能有所帮助,

如果目标是传递查询表达式,Mads建议了一个好的解决方案

如果目标是为单个查询构造函数传递多个条件值,那么如果客户端重复rs:qhttp查询参数,q键是否有一个值列表?例如:

/v1/resources/{module}?rs:q=bri&rs:q=ade

希望这能有所帮助,

如果这是一个自定义REST端点,您能在问题中发布代码吗?这有助于查看您使用参数值执行搜索的操作。如果这是自定义REST端点,您可以在问题中发布代码吗?它有助于查看您在使用参数值执行搜索时所做的操作。如果目标是将查询值作为单个HTTP值传递,则一种方法是选择任何值中都没有出现的字符作为分隔符,将值与分隔符连接,并使用fn:tokenize()或fn.tokenize()在分隔符上拆分以获取值列表。谢谢!你介意分享一个关于分隔符如何工作的例子吗?我不清楚是应该在HTTP rs:q中传递该分隔符,还是应该在cts查询模块中使用fn.tokenize()和分隔符……例如,如果分隔符是|字符,HTTP编码是%7C,那么查询参数将是rs:q=bri%7cade,调用类似于:const wordList=fn.tokenize(…q的值,“|”).toArray();如果目标是将查询值作为单个HTTP值传递,一种方法是选择一个没有出现在任何值中的字符作为分隔符,将值与分隔符连接,然后使用fn:tokenize()或fn.tokenize()在分隔符上拆分以获得值列表。谢谢!你介意分享一个关于分隔符如何工作的例子吗?我不清楚是应该在HTTP rs:q中传递该分隔符,还是应该在cts查询模块中使用fn.tokenize()和分隔符……例如,如果分隔符是|字符,HTTP编码是%7C,那么查询参数将是rs:q=bri%7cade,调用类似于:const wordList=fn.tokenize(…q的值,“|”).toArray();