首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >MarkLogic不敏感片段

MarkLogic不敏感片段
EN

Stack Overflow用户
提问于 2015-09-04 09:40:05
回答 1查看 220关注 0票数 4

现在,我使用这段代码根据从MarkLogic搜索获得的JSON文档生成代码片段。

代码语言:javascript
代码运行次数:0
运行
复制
xquery version "1.0-ml";
module namespace searchlib="http://ihs.com/lib/searchlib";
import module namespace search="http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy"; 
import module namespace json="http://marklogic.com/xdmp/json" at "/MarkLogic/json/json.xqy";

declare function searchlib:get-snippet($docc,$words) {
  let $doc:= json:transform-from-json($docc)
  let $squery := search:parse($words)
  let $result := <result>{search:snippet($doc,$squery,
  <transform-results apply="snippet" xmlns="http://marklogic.com/appservices/search">
          <max-snippet-chars>255</max-snippet-chars>

      </transform-results>)}</result>

  return $result//search:match
};

在执行搜索时,我使用:

代码语言:javascript
代码运行次数:0
运行
复制
cts.jsonPropertyValueQuery(fieldname, values, 
                                             ['case-insensitive', 'diacritic-insensitive'])

因此,搜索工作不敏感,并产生良好的结果,但在search:snippet,我不能通过diacritic-insensitive选项,在cts.jsonPropertyValueQuery中。

文档中,我可以在描述中看到这一点

选项来定义搜索语法并控制搜索。有关函数搜索:搜索,请参见$options的说明。请注意,您不能在搜索:snippet的transform-results选项上指定apply属性;要使用不同的代码段函数,可以使用search:search或search:resolve。

但在这里是:

代码语言:javascript
代码运行次数:0
运行
复制
search:snippet(
   $result as node(),
   $cts-query as schema-element(cts:query),
   [$options as element(search:transform-results)?]
) as element(search:snippet)

那么,这是否意味着我不能传递其他搜索选项:代码片段?还是有办法这样做?

我正在使用chávez测试它,它正在生成结果,但是只有包含完全匹配的文档才能正确地生成片段,这意味着文档

查韦斯做了什么

不会在Chavez

查韦斯做了什么

会得到更高的

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-16 06:29:41

问题不在于将选项传递给search:snippet,而是传递给search:parse

代码语言:javascript
代码运行次数:0
运行
复制
xquery version "1.0-ml";
module namespace searchlib="http://ihs.com/lib/searchlib";
import module namespace search="http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy"; 
import module namespace json="http://marklogic.com/xdmp/json" at "/MarkLogic/json/json.xqy";

declare function searchlib:get-snippet($docc,$words) {
  let $doc:= json:transform-from-json($docc)
  let $squery := search:parse($words,
<options xmlns="http://marklogic.com/appservices/search">
<term>
<term-option>case-insensitive</term-option>
<term-option>diacritic-insensitive</term-option>
</term>
</options>, "cts:query")

  let $result := <result>{search:snippet($doc,$squery,
  <transform-results apply="snippet" xmlns="http://marklogic.com/appservices/search">
          <max-snippet-chars>255</max-snippet-chars>

      </transform-results>)}</result>

  return $result//search:match
};

传球

代码语言:javascript
代码运行次数:0
运行
复制
<term-option>diacritic-insensitive</term-option>

search:parse让它运转起来。

以下是来自MarkLogic的解释:

search:snippet()函数允许您提取匹配的文本,并返回封装在包含节点中的匹配项,并带有高亮标记。但是,为了允许搜索:片段提取正确的文本,传递给代码片段的cts:query()应该匹配值的顺序。对于search:snippetcts:query通常是调用search:parse的结果。search:parse()函数根据给定的选项解析查询文本,并返回适当的cts:query XML。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32394802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档