带约束的Marklogic搜索语法
我有如下限制条件。。带着约束带约束的Marklogic搜索语法,marklogic,marklogic-9,Marklogic,Marklogic 9,我有如下限制条件。。带着约束 <options xmlns="http://marklogic.com/appservices/search"> <additional-query> <cts:and-query xmlns:cts="http://marklogic.com/cts"> <cts:collection-query> <cts:uri>Onc
<options xmlns="http://marklogic.com/appservices/search">
<additional-query>
<cts:and-query xmlns:cts="http://marklogic.com/cts">
<cts:collection-query>
<cts:uri>OncoWatch</cts:uri>
</cts:collection-query>
</cts:and-query>
</additional-query>
<constraint name="search-text">
<word>
<field name="wos_topic"/>
</word>
</constraint>
<term>
<term-option>case-insensitive</term-option>
<term-option>punctuation-insensitive</term-option>
<term-option>whitespace-insensitive</term-option>
<term-option>wildcarded</term-option>
</term>
</options>
肿瘤学家
不区分大小写
标点不敏感
不区分空格
通配符
当我执行搜索字符串
'(搜索文本:(patient*或成人*)'
时,我得到的结果与执行搜索字符串'(搜索文本:patient*)或(搜索文本:成人*)时的结果完全不同。
。。这两者不一样吗?如果对搜索字符串应用search:parse
,您可以很容易地看到差异:
xquery version "1.0-ml";
import module namespace search = "http://marklogic.com/appservices/search"
at "/MarkLogic/appservices/search/search.xqy";
let $options := <options xmlns="http://marklogic.com/appservices/search">
<additional-query>
<cts:and-query xmlns:cts="http://marklogic.com/cts">
<cts:collection-query>
<cts:uri>OncoWatch</cts:uri>
</cts:collection-query>
</cts:and-query>
</additional-query>
<constraint name="search-text">
<word>
<field name="wos_topic"/>
</word>
</constraint>
<term>
<term-option>case-insensitive</term-option>
<term-option>punctuation-insensitive</term-option>
<term-option>whitespace-insensitive</term-option>
<term-option>wildcarded</term-option>
</term>
</options>
return (
search:parse("(search-text:(patient* OR adult*))", $options),
search:parse("(search-text:patient*) OR (search-text:adult*)", $options)
)
xquery版本“1.0-ml”;
导入模块命名空间搜索=”http://marklogic.com/appservices/search"
位于“/MarkLogic/appservices/search/search.xqy”;
let$options:=
肿瘤学家
不区分大小写
标点不敏感
不区分空格
通配符
返回(
搜索:解析((搜索文本:(患者*或成人*)”,$options),
搜索:解析((搜索文本:患者*)或(搜索文本:成人*),$options)
)
搜索解析器支持相当复杂的带有AND、OR、NEAR等的搜索字符串,但缺少将多个值输入到单个约束中的支持。后者是正确的写作方式。第一个简单地让解析器从外观上看不清楚,结果OR丢失,有效地导致它搜索短语搜索文本:“patient*maintal*”
,这与需要两个术语是一样的
嗯 如果在搜索字符串上应用
search:parse
,您可以很容易地看到差异:
xquery version "1.0-ml";
import module namespace search = "http://marklogic.com/appservices/search"
at "/MarkLogic/appservices/search/search.xqy";
let $options := <options xmlns="http://marklogic.com/appservices/search">
<additional-query>
<cts:and-query xmlns:cts="http://marklogic.com/cts">
<cts:collection-query>
<cts:uri>OncoWatch</cts:uri>
</cts:collection-query>
</cts:and-query>
</additional-query>
<constraint name="search-text">
<word>
<field name="wos_topic"/>
</word>
</constraint>
<term>
<term-option>case-insensitive</term-option>
<term-option>punctuation-insensitive</term-option>
<term-option>whitespace-insensitive</term-option>
<term-option>wildcarded</term-option>
</term>
</options>
return (
search:parse("(search-text:(patient* OR adult*))", $options),
search:parse("(search-text:patient*) OR (search-text:adult*)", $options)
)
xquery版本“1.0-ml”;
导入模块命名空间搜索=”http://marklogic.com/appservices/search"
位于“/MarkLogic/appservices/search/search.xqy”;
let$options:=
肿瘤学家
不区分大小写
标点不敏感
不区分空格
通配符
返回(
搜索:解析((搜索文本:(患者*或成人*)”,$options),
搜索:解析((搜索文本:患者*)或(搜索文本:成人*),$options)
)
搜索解析器支持相当复杂的带有AND、OR、NEAR等的搜索字符串,但缺少将多个值输入到单个约束中的支持。后者是正确的写作方式。第一个简单地让解析器从外观上看不清楚,结果OR丢失,有效地导致它搜索短语搜索文本:“patient*maintal*”
,这与需要两个术语是一样的
嗯 您可以让搜索返回查询并共享其输出吗?您可以让搜索返回查询并共享其输出吗?使用cts:parse可能是另一个选项。与搜索API字符串查询语法不同,cts字符串查询语法允许您对列表应用约束。另外,我发现这个答案很有帮助:使用cts:parse可能是另一种选择。与搜索API字符串查询语法不同,cts字符串查询语法允许您对列表应用约束。请参阅。此外,我发现这个答案很有帮助: