LTR 插件使用
1、初始化默认的特征仓库
一个特征仓库就是一个es的索引,可以存储特征和模型的元数据。
默认的特征仓库,就是
PUT _ltr
DELETE _ltr
2、特征和特征集合
特征集合是LTR在es中发生行为的地方。
创建特征集合,可以用POST,并给出特征集合的名字和特征列表
_ltr是索引
_featureset是type
下面的document存储了对应的特征定义
POST _ltr/_featureset/test
{
"featureset": {
"features": [
{
"name": "title_query",
"params": [
"keywords"
],
"template_language": "mustache",
"template": {
"match": {
"title": "{{keywords}}"
}
}
},
{
"name": "custom_title_query_boost",
"params": [
"some_multiplier",
"ltr_param_foo"
],
"template_language": "script_feature",
"template": {
"lang": "painless",
"source": "(long)params.default_param * params.feature_vector.get('title_query') * (long)params.some_multiplier * (long) params.param_foo",
"params": {
"default_param" : 10.0,
"some_multiplier": "some_multiplier",
"extra_script_params": {"ltr_param_foo": "param_foo"}
}
}
}
]
}
}
分析一下LTR插件怎么利用的索引
首先,ltrstore是一个索引,它的mapping如下:
GET .ltrstore/_mapping
{
".ltrstore" : {
"mappings" : {
"store" : {
"dynamic" : "strict",
"properties" : {
"feature" : {
"type" : "object",
"enabled" : false
},
"featureset" : {
"type" : "object",
"enabled" : false
},
"model" : {
"type" : "object",
"enabled" : false
},
"name" : {
"type" : "text",
"fields" : {
"prefix" : {
"type" : "text",
"analyzer" : "name_prefix",
"search_analyzer" : "name_prefix_search"
}
},
"analyzer" : "keyword"
},
"type" : {
"type" : "keyword"
}
}
}
}
}
}
所以以下返回一样
GET .ltrstore/store/_search
GET _ltr/_featureset
同理,以下也是一样的
GET .ltrstore/store/featureset-test //特征集合的内容就是一个document
GET _ltr/_featureset/test //返回某个特征集合的内容
也就是说LTR把索引下的分类映射成了object的document来存储
同样的,往里写入时,可以自己添加一些字段,就一样了
POST .ltrstore/store/featureset-singletest
{
"name":"singletest", //自己添加的
"type":"featureset", //自己添加的
"featureset": {
"name":"singletest", //自己添加的
"features": [
{
"name": "title_query",
"params": [
"keywords"
],
"template_language": "mustache",
"template": {
"match": {
"title": "{{keywords}}"
}
}
},
{
"name": "custom_title_query_boost",
"params": [
"some_multiplier",
"ltr_param_foo"
],
"template_language": "script_feature",
"template": {
"lang": "painless",
"source": "(long)params.default_param * params.feature_vector.get('title_query') * (long)params.some_multiplier * (long) params.param_foo",
"params": {
"default_param" : 10.0,
"some_multiplier": "some_multiplier",
"extra_script_params": {"ltr_param_foo": "param_foo"}
}
}
}
]
}
}