搜索推荐样例
- tmdb 作为 数据源,训练es的使用
- 搜索以及推荐部分
- ES是什么
- 独立网络上一组进程节点。对外提供搜索服务。对内就是一个搜索数据库
- 名词定义
- 索引 == 数据库
- 类型 == 表 (7.0以后取消)
- 文档 == 行数据
- 索引。 搜索中的数据库或表定义。构建文档时候的索引创建
- 分词。 搜索是以词为单位做最基本的搜索单元,依靠分词器构建分词,用分词构建倒排索引。
- TF-IDF打分。
- TF。词频。这个document文档报了多少这个词,包含越多表明越相关
- DF: 文档频率。包含该词的文档总数目
- 词频归一化
- 分词器。字符过滤器(过滤特殊符号外加量词,the 等等) -> 字符处理 -> 分词过滤(分词转换,词干转化)
- 索引建立
- match查询
- 按照字段上定义的分词分析后去索引内查询
- match分词后的and和or。match 默认使用的是or。
- 最小词项匹配
- term查询,不进行词的分析,直接去索引查询,及搜索关键词和索引内词的精确匹配
- 短语查询,短语前缀词查询
- 多字段查询
- 加权重的多字段
- 布尔查询
- must:必须是true
- must not :必须是false
- should:其中有一个为true即可。为true越多则得分越高
- 不同类型查询
- best_fields:默认的得分方式,取得分最高的作为对应的分数,最匹配模式,
- most_fields:考虑绝大多数文档的字段得分相加,获得我们想要的结果
- cross_fields:以分词为单位计算栏位总分
- filter查询
- 单条件过滤
- 多条件过滤
- 带match的filter
- function 自定义打分
- field:声明对应要处理的字段
- modifier:计算对数
- factor :影响因子,预处理
- score_mode:不同的field value之间的得分相加
- boost_mode:最后在与old value相加
- 查全率查准率。两者不可兼得,寻求平衡。
- 查全率: 正确的结果有n个,查询出来正确的有m个
- 查准率: 查出的n个文档有m个准确
- 分词器
- analyzer 指定的是构建索引的时候的分词
- search_analyzer 指定的是搜索关键字时候的分词
- 最佳实践: 索引的时候用max_word,但是查询的时候用smart_word
- IK分词器定制化
- 定制化。扩展词库。热更新词库。根据http请求的last-modifide 和etag,每1分钟检测一次。
- 同义词及词性。语义相近或相同。品牌类目关联。
- 同义词及相关处理 2. 更改搜索条件以及方式
- 索引实时性
- 使用logstash,第一次全量构建索引,然后每分钟执行sql,进行增量索引更新。
- 使用logstash-input-jdbc。
- 全量索引导入完成后,尝试使用时间戳维度做增量导入,即logstash-input-jdbc每隔一段时间执行某条sql,在对应sql内加入update-at的时间范围,做增量数据捞取后更新到es中
- 增量sql。同时需要新增一个文件用户记录档次执行的update_at时间。
- canal 引入
- 接入canal client
- 使用logstash,第一次全量构建索引,然后每分钟执行sql,进行增量索引更新。
- 使用ALS算法对离线数据进行模型训练,通过用户信息和产品信息的矩阵相乘,获取相关的信息
- ALS算法。最小二乘法。利用矩阵分解的结果无限逼近现有数据,得到隐含特征。利用隐含特征预测其余结果
- 协同过滤算法。基于用户和物品的交易或浏览行为组成矩阵后计算用户和物品相似度,再推荐不同的商品给对应的用户
- 使用LR 和 GBDT算法 对离线数据进行进行模型预测,并打分,实现召回的精排。精排是需要对特征进行处理,离散特征,连续特征。
- LR算法。逻辑回归。通过特征组成多维度坐标系,计算一组可能的特征下的输出结果是0还是1的概率
- gdbt算法。决策树。通过属性的机构在多维度的特征下作选择,最终达到一个最有可能的输出结果。
- 构建用户画像