搜索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,该参数只有当去重服务在<MiningBundle>里配置方才有效。
响应中各参数说明如下:
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}
]
}
]
}