您的位置:首页 > 产品设计 > 产品经理

Marklogic search development -2.1 Understanding the Search API

2013-08-25 13:28 337 查看

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 search =  http://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的分析工作转成cts:query。并在searchresponse中体现snippet,URI,pagenation等信息。

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

2.1.3        Automatic Query Text Parsing and Grammar
Search API会自动地将用户的Query string解析成search term,用以调用cts:query。这个过程中使用到了search
gammer,term completion, stem,collection,facet等等等等。


• XQuery: The search:search and search:parse functions
• Java: The com.marklogic.client.query.QueryManager class
•REST: The /search service

你可以直接使用RESTservice,Java API来调用searchAPI。

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

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

                             

当你点击2000s(240)的时候,你将发起一个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中给到建议的查询条件。在marklogic中search: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以及
a2c6
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的情形。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息