搜索API =========================== 该API提供SF1的核心功能:全文检索,请求(Request)和响应(Response)都以JSON串的 格式包装。 URI: http://server/sf1r/documents/search 参数 ----- 请求中各参数说明如下: * collection(字符串类型):collection名称 * search(对象类型):提供和搜索相关的参数 * keywords(字符串类型):用户输入的搜索关键词 * in(数组类型):设置搜索在哪儿字段上执行,默认为在所有字段上执行。 * ranking_model:文档相关度的计算模型。SF1内部有3种模型供用户选择: * plm模型 * bm25模型 * searching_mode:搜索模式。SF1提供了多种常用的搜索模式: * and(默认) * or * wand * suffix * knn * analyzer:关键字分析器的相关参数: * use_synonym_extension(布尔类型):使用使用同义词扩展,默认false。 * apply_la(布尔类型):是否对关键字分词,默认true。 * use_original_keyword(布尔类型):默认false。 * query_abbreviation(整数类型): 指定原始query搜索结果为空时,返回经过查询缩写处理过的搜索结果的个数 * select(数组类型):设置搜索结果包含哪些字段。 * conditions(数组类型):搜索结果的过滤条件,需要指定在哪儿属性设置过滤条件。 * property(字符串类型):属性名称 * operator(字符串类型):条件操作符。包含如下: * = :等于操作符 * <> :不等于操作符 * < :小于操作符 * <= : 小于等于操作符 * > : 大于操作符 * >= : 大于等于操作符 * between :区间操作符 * in : 属于操作符 * not_in : 不属于操作符 * starts_with : 前缀操作符,仅适用于字符串属性 * ends_with : 后缀操作符,仅适用于字符串属性 * contains : 包含操作符,仅适用于字符串属性 * value:属性值 * sort(数组类型):对搜索结果排序 * property(字符串):属性名称(按该属性排序) * order(字符串):升序或降序 * ASC:升序 * DESC:降序 * limit(整数类型):限制返回文档的个数,默认20。 * offset(整数类型):该参数一般和limit一起使用,默认0。如果每页返回10个文档,则第一页 的参数应该是“limit=10,offset=0”,第二页的参数设置“limit=10,offset=10“ * remove_duplicated_result(布尔类型):设置搜索结果中是否去除重复文档,默认true,该参数只有当去重服务在里配置方才有效。 响应中各参数说明如下: * total_count(整数类型):匹配文档总数,如果查询为Suffix模式,则该数值为估计值。 * top_k_count(整数类型):返回实际的top k结果数目。 * resources(数组类型):该参数中的每一个对象都是一个文档。每个文档由一系列的K-V对组成,key即为属性名称,而v alue即为属性值。下面给出可能出现的特殊的属性: * DOCID(字符串类型): * _id(整数类型):SF1内部用来标示文档的ID * _duplicate_document_count(整数类型):和该文档重复的文档数目,该参数仅当去重计算模块配置时方才有效 * _similar_document_count(整数类型):和该文档相似的文档数目,该参数仅当语义相似度计算模块配置时方才有效 * related_queries(数组类型):字符串类型的数组,标识相关联的查询请求。 * taxonomy(对象类型):分类结果: * labels(数组类型):分类标签 * label(字符串类型):标签名称 * document_count(整数类型):属于该标签的文档数 * sub_labels(数组类型):子标签数组,结构与本标签一致。 * range(对象类型):属性值的范围 * max(浮点数类型):最大属性值 * min(浮点数类型):最小属性值 * count(Map类型): 返回查询对应某属性的个数,类似Select Count(*) 语义 * refined_query(字符串类型):在查询结果数目小于设定的阈值时,重新定义的查询请求。 * group(数组类型):每个对象标识每个属性的分组结果 * property(字符串类型):属性名 * document_count(整数类型):搜索结果中包含该属性的文档数目 * labels(数组类型):分组标签。每个标签表示一个属性值,有如下域: * label(字符串类型):标签名称,标识属性值 * document_count(整数类型):该标签下的文档数目 * sub_labels(数组类型):子标签数组,与本标签有相同的结构。 * attr(数组类型):属性数组,每个对象标识一个属性。该数组按照document_count降序排列。 * attr_name(字符串类型):属性名称 * document_count(整数类型):搜索结果中包含该属性的文档的数目。 * labels(数组类型):组标签。每个对象标识一个属性标签,具有如下结构: * label(字符串类型):标签名,标识属性值 * document_count(整数类型):搜索结果中包含该标签的文档数目 * top_group_label(数组类型):每个对象代表一个为属性自动选择的组标签。 * group_property(字符串类型):属性名 * group_label(数组类型):组标签数组,每个对象代表从root节点到leaf节点的路径。 示例 ------ 下面给出search的请求与响应示例: 请求: :: { "collection": "ChnWiki", "search": { "keywords": "test", "log_keywords": true, "ranking_model": "plm", "analyzer": { "use_synonym_extension": true, "apply_la": true, "use_original_keyword": true }, "in": [ {"property": "title"}, {"property": "content"} ] }, "group": [ {"property": "area"}, {"property": "price"} ], "attr": { "attr_result": true } // operator list // - equal, = // - not_equal, <> // - greater_than, > // - greater_than_or_equal, >= // - less_than, < // - less_than_or_equal, <= // - in // - between // - starts_with // - ends_with // - contains "conditions": [ {"property": "id", "operator": "equal", "value": 10}, {"property": "id", "operator": "in", "value": [10, 20, 30]} {"property": "price", "operator": "between", "value": [10.0, 20.0]} ], "select": [ { "property": "title" } { "property": "content", "highlight": false, "snippet": true, "summary": false, "summary_sentence_count": 3, "summary_property_alias": "content.summary" } ], "sort": [ { "property": "title" }, { "property": "content", "order": "ASC"}, { "property": "_rank", "order": "DESC"} ], "limit": "20", "offset": "0", "remove_duplicated_result": true, } 响应: :: { "header": { "success": true }, "errors": [ "Error message 1", "Error message 2" ], "resources": [ { "title": "xxx", "content": "xxx"}, { "title": "yyy", "content": "yyy"} ], "related_queries": ["a", "b"], "taxonomy": { "labels": [ { "label": "animal", "document_count": 10, "sub_labels": [ { "label": "dog", "document_count": 6 }, { "label": "cat", "document_count": 4 } ] }, { "label": "music", "document_count": 5 } ] }, "group": [ { "document_count": 10, "property": "area", "labels": [ { "label": "China", "document_count": 7, "sub_labels": [ { "label": "Shanghai", "document_count": 5 }, { "label": "Beijing", "document_count": 2 } ] }, { "label": "America", "document_count": 3 } ] }, { "document_count": 10, "property": "price", "labels": [ { "label": "100", "document_count": 4 }, {"label": "200", "document_count": 6 } ] } ] "attr": [ { "document_count": 10, "attr_name": "品牌", "labels": [ { "label": "阿依莲", "document_count": 7}, { "label": "淑女屋", "document_count": 3} ] }, { "document_count": 8, "attr_name": "尺码", "labels": [ { "label": "L", "document_count": 5}, { "label": "M", "document_count": 4}, { "label": "XL", "document_count": 3} ] } ] }