Marklogic search development -2.1Understanding the Search API

来源:互联网 发布:三星ml2161清零软件 编辑:程序博客网 时间:2024/04/20 11:55

2.1   Understanding the Search API

Search API是一套基于searchparsing; search grammer;search snipet; search facet; search term completion以及其他一些功能的组合。

2.1.1        XQuery Library Module

import module namespace searchhttp://marklogic.com/appservices/search at"/MarkLogic/appservices/search/search.xqy";

SearchAPI是以xquerymodule的方式出现的。你可以使用上面的prolog方式引入search API module。

Snippet: search:snippet,

Query-completion: search:suggest

Query-suggestion,

2.1.2        Simple search:search Example and Response Output

Search:search 其中会做诸如search parsing, search termcompletion, search grammer等针对searchquery string的分析工作转成ctsquery。并在searchresponse中体现snippetURIpagenation等信息。

非常方便易用。你可以基于searchresponse制作绝大多数基于search结果的applicationUI页面了。

2.1.3        Automatic Query Text Parsing and Grammar

Search API会自动地将用户的Query string解析成search term,用以调用ctsquery。这个过程中使用到了search gammerterm completion stemcollectionfacet等等等等。

• XQuery: The search:search and search:parse functions

• Java: The com.marklogic.client.query.QueryManager class

•REST: The /search service

你可以直接使用RESTserviceJava API来调用searchAPI

2.1.4        Constrained Searches and Faceted Navigation

Constrained search实际上就是更近一步对你的search条件进行限制。例如:decade:2000s表示对decade年度进行查询,查询的条件是2000s年。

而Factetdsearch是highlight出你的constrained search后结果集中的count。

                             

当你点击2000s240)的时候,你将发起一个constrainedsearch: decade:2000s

每个search response中都还用facet信息,从而你可以根据facet信息构建如上图的UI

<search:responsetotal="2370" start="1" page-length="10"xmlns=""

xmlns:search="http://marklogic.com/appservices/search">

<search:facetname="decade">

<search:facet-valuename="2000s" count="240">

2000s</search:facet-value>

<search:facet-valuename="1990s" count="300">

1990s</search:facet-value>

<search:facet-valuename="1980s" count="300">

。。。

</search:facet>

</search:response>

(前提,你要获取如上facet信息,你需要预先定义rangeindex, lexicon API等等)

2.1.5        Built-In Snippetting

Search response对象还提供Snippet的信息,在其中你可以获得诸如highlighsearch term,

Query string, snippet of original documnent等等信息。极大的方便了searchapplication UI的建设。

当然,你可以在response对象中自定义这样的snippet输入格式。

2.1.6        Search Term Completion

这个功能非常好,当用户在query textbox输入查询单词时,同时marklogic可以在dragdown list中给到建议的查询条件。在marklogicsearch:suggestion是用来支持这个feature的。

2.1.7        Search Customization Via Options and Extensions

你可以使用apply来使用自定义的funcation来处理searchresoult

<transform-resultsapply="my-snippet"ns="my-namespace"

at="/my-module.xqy" />

表示是用my-snippet这个func,该func位于目标app server 的my-module.xqy中。

如你所见,使用apply可以使用自定义的custoimzer func来处理你的search。 我们知道,search option有很多,有基于term的有基于gammer的,他们都有“apply”这个属性,你可以使用它来扩展你的search以及search response。这个就是大名鼎鼎的function value模式。

TheSearch API uses function values to pass your custom function as

a parameter,replacing the default Search API functionality. For details on function values,see

Function Values in theApplication Developer’s Guide

2.1.8        Speed and Accuracy

查询速度与查询结果的精确度之间是相互有取舍的。通常你需要在它们两个之间根据特定的场景或需求进行取舍性决定。 如:searchAPI中的filter与unfilter,diactritic 与case-sensitivity 这些option就是分别针对速度或者偏重精度的。甚至有些option在精度上还会出现负面的错误情况,如unfilter。

 

lexiconAPI 是基于rangeindex的resolution的,而并不是基于search value的。因为你的index的分辨率并不能保证对你的查询的精确度的保证。因此这个东东的查询结果也不能保证100%的精度要求。

Fragmentationoption也可以用来调整indexresolution的精确度。另外world position 以及element world position的enable也可以降低这种false-positive的情形。