Marklogic 标记逻辑搜索语法问题
我的印象是,当一个搜索短语在双引号中时,它将进行精确的搜索。但我也得到了部分比赛(尽管分数很低)。我原以为它会完全匹配。下面是我的示例代码。。我错过什么了吗Marklogic 标记逻辑搜索语法问题,marklogic,marklogic-8,Marklogic,Marklogic 8,我的印象是,当一个搜索短语在双引号中时,它将进行精确的搜索。但我也得到了部分比赛(尽管分数很低)。我原以为它会完全匹配。下面是我的示例代码。。我错过什么了吗 xquery version "1.0-ml"; declare namespace html = "http://www.w3.org/1999/xhtml"; import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic
xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy";
import module namespace functx = "http://www.functx.com" at "/MarkLogic/functx/functx-1.0-doc-2007-01.xqy";
let $q := '(“protein degradation”) AND ((context:PCS)) AND (sort:date_desc)'
let $options :=
<options xmlns="http://marklogic.com/appservices/search">
<additional-query>
<cts:collection-query xmlns:cts="http://marklogic.com/cts">
<cts:uri>http://XXXXX/type/envelope</cts:uri>
</cts:collection-query>
</additional-query>
<operator name="sort">
<state name="date_desc">
<sort-order type="xs:dateTime" direction="descending">
<field name="upload_date"/>
</sort-order>
</state>
<state name="date_asc">
<sort-order type="xs:dateTime" direction="ascending">
<field name="upload_date"/>
</sort-order>
</state>
</operator>
<constraint name="context">
<range type="xs:string" facet="true">
<element name="context" ns="http://XXXXX/metadata"/>
<facet-option>frequency-order</facet-option>
<facet-option>descending</facet-option>
</range>
</constraint>
<constraint name="type">
<range type="xs:string" facet="true">
<element name="type" ns="http://XXXXX/metadata"/>
<facet-option>frequency-order</facet-option>
<facet-option>descending</facet-option>
</range>
</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>
<search-option>unfiltered</search-option>
</options>
let $start := 1
let $page-length :=1
let $result := search:search($q, $options, $start, $page-length)
return $result
xquery版本“1.0-ml”;
声明命名空间html=”http://www.w3.org/1999/xhtml";
导入模块命名空间搜索=”http://marklogic.com/appservices/search“在“/MarkLogic/appservices/search/search.xqy”;
导入模块命名空间functx=”http://www.functx.com“at”/MarkLogic/functx/functx-1.0-doc-2007-01.xqy”;
让$q:='(“蛋白质降解”)和((上下文:PCS))和(排序:date_desc)'
let$options:=
http://XXXXX/type/envelope
频率顺序
下降的
频率顺序
下降的
不区分大小写
标点不敏感
不区分空格
通配符
未过滤
让$start:=1
设$page length:=1
let$result:=搜索:搜索($q、$options、$start、$page length)
返回$result
下面是我得到的。。我很困惑。。我不明白为什么下面的结果会如此成功
<search:result index="1" uri="/documents/PCS/0ba1e4a0190b77a3962e1218c3c1a7f4cb233ddf.xml" path="fn:doc("/documents/PCS/0ba1e4a0190b77a3962e1218c3c1a7f4cb233ddf.xml")" score="58624" confidence="0.329381" fitness="0.5856407">
<search:snippet>
<search:match path="fn:doc("/documents/PCS/0ba1e4a0190b77a3962e1218c3c1a7f4cb233ddf.xml")/*:document-envelope/*:metadata/*:context">
<search:highlight>PCS</search:highlight>
</search:match>
<search:match path="fn:doc("/documents/PCS/0ba1e4a0190b77a3962e1218c3c1a7f4cb233ddf.xml")/*:document-envelope/*:extractedText/*:html/*:body/*:p[1]">
Analysis of the Safety Risks Associated with Hydrazine as a <search:highlight>Degradation</search:highlight> Product in LCIG RD12714 ra-rd12714-hydrazine</search:match>
<search:match path="fn:doc("/documents/PCS/0ba1e4a0190b77a3962e1218c3c1a7f4cb233ddf.xml")/*:document-envelope/*:extractedText/*:html/*:body/*:p[9]">...of the Safety Risks Associated with Hydrazine as a <search:highlight>Degradation</search:highlight> Product in...</search:match>
</search:snippet>
</search:result>
过程控制系统
LCIG RD12714 ra-RD12714-肼降解产物肼相关安全风险分析
…与肼作为降解产物相关的安全风险。。。
如果我们在上面的结果中注意到它匹配降级
。。。当我们试图进行精确搜索时,为什么它会进行部分匹配
-----添加了搜索:解析输出------
“蛋白质
不区分大小写
标点不敏感
不区分空格
通配符
退化”
不区分大小写
标点不敏感
不区分空格
通配符
_1:背景
过程控制系统
校勘=http://marklogic.com/collation/
我建议您使用名为“精确”的术语选项
从文档中:
“准确”
精确匹配查询。“区分大小写”、“区分重音”、“区分标点”、“区分空格”、“不带空格”和“不带空格”的缩写。我认为问题在于花哨的引号:
import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy";
search:parse('"protein degradation"')
给出:
<cts:word-query xmlns:cts="http://marklogic.com/cts">
<cts:text xml:lang="en">protein degradation</cts:text>
</cts:word-query>
<cts:and-query xmlns:cts="http://marklogic.com/cts">
<cts:word-query>
<cts:text xml:lang="en">“protein</cts:text>
</cts:word-query>
<cts:word-query>
<cts:text xml:lang="en">degradation”</cts:text>
</cts:word-query>
</cts:and-query>
给出:
<cts:word-query xmlns:cts="http://marklogic.com/cts">
<cts:text xml:lang="en">protein degradation</cts:text>
</cts:word-query>
<cts:and-query xmlns:cts="http://marklogic.com/cts">
<cts:word-query>
<cts:text xml:lang="en">“protein</cts:text>
</cts:word-query>
<cts:word-query>
<cts:text xml:lang="en">degradation”</cts:text>
</cts:word-query>
</cts:and-query>
“蛋白质
退化”
hmm。。。所以你的建议是,如果有引号,那么我添加exact我想这个词选项将应用于整个搜索字符串,而不仅仅是短语,对吗?所以这只适用于双引号包围整个搜索字符串的情况。是的,我也是这么想的。。。如果只有部分搜索字符串有引号,那么会发生什么?是的,整个搜索字符串都有引号。在过去,我们必须在搜索字符串上使用cts:tokenize,并将内容处理为更复杂的cts:search,这是一项非常艰巨的工作。您可能会发现深入研究search:parse的好处。请将search:parse的输出与您的查询和选项共享。这是调试字符串搜索的一个很好的方法。添加了搜索:parse outputThank you。。应该已经检查了解析函数