hi,我是蛋挞,一个初出茅庐的后端开发,希望可以和大家共同努力、共同进步!
开启掘金成长之旅!这是我参与「掘金日新计划 · 4 月更文挑战」的第 17 天,点击查看活动详情
- 起始标记->电影搜索服务(3讲):「90 | 项目需求分析及架构设计」
- 结尾标记->Elastic认证(5讲):「100 | 结课测试&结束语」
电影搜索服务
项目需求分析及架构设计
需求分析
- IMDB: Movie DB
- 搜索框,支持输入提示
- 过滤器过滤结果,支持排序
- 搜索结果的相关性排序
搜素类应用前端通用布局
后端通用需求
后端 UI
- 自定义同义词(Matrix = 黑客帝国=矩阵革命)
- 获取用户搜索统计数据
- 调整字段的相关性权重
Elastic App Search 介绍
- 7.2之前都是 Beta
- www.elastic.co/blog/elasti…
- 14 天在线 SaaS 试用
架构
安装与配置 Demo
DEMO 中,使用 AppSearch 7.3.1和 Elasticsearch 7.3.1
将电影数据导入Elasticsearch
设置APP Search环境,准备数据,用来作为电影搜索的数据集。
如何设置一个APP Search
需要将allow_es_settings_modification 设置为true,即可开启
开启成功
选择引擎命名以及语言
可以通过点击View Documenttation 查看详细介绍
TMDB数据库
- 创建于 2008 年,电影的 Meta Data 库
- 46 万本电影/12万本电视剧/230万张图片/每周 20万次编辑
- 提供 API。总共有超过20万开发人员和公司在使用
入库脚本
程序运行结束,所有数据写入到APP Search当中
可以查看相关的调用情况
点击Document可以查看写入的文档的信息
搭建你的电影搜索服务
Search UI
- 功能概览
- Analytics获取用户搜索相关的统计数据
- UI 的参考实现
- 管理
- github.com/elastic/sea…
定制前端界面
其他的前端框架
- Reactive Search
- Demo
App Search 后台管理 - http://localhost:3002
- 功能概览
- 获取用户搜索相关的统计数据Analytics:
- 管理
- 文档/Schema/API日志
- 搜索设定
- 自定义同意词(Matrix = 黑客帝国 =矩阵革命)
- 调整字段的相关性权重
可以修改索引的
设置同义词
调整bosting的值
CodeDemo
安装配置
app-search.yml:
allow_es_settings_modification: true
#Allow Elasticsearch to create indexes automatically: Add the following line #within either Elasticsearch cluster settings or elasticsearch.yml:
action.auto_create_index: ".app-search-*-logs-*,-.app-search-*,+*"
准备数据,使用python 2.7
APP_SEARCH_NAME=tmdb APP_SEARCH_PWD=private-dtcda1pdruoq2hvwqe8rhz1x python ./ingest_tmdb_to_appserarch.py
# 使用最新版本的 node
nvm list
nvm use default
相关阅读
- APP Search Release - www.elastic.co/blog/elasti…
- Search UI - www.elastic.co/blog/search…
本节知识小节
介绍了电影搜索项目的基本需求,同时介绍了什么是APP Search,在接下来的项目中将会使用APP Search,快速的构建电影搜索项目。演示了如何简单的设置一个APP Search,它的安装和配置非常简单,只需要简单的下载,简单的加入一行配置到Yml文件当中,另外在安装的时候需要确保APP Search需要和Elasticsearch使用相同的版本号。同时通过程序到TMDB上抓取了一定的数据,通过调用APP Search API,往APP Search中写入数据集。调用APP Search的API 的时候需要拿到一个具有写权限的用户,通过一种方式调用python程序,最终才能把这个数据成功的写入APP Search当中。如果结合APP Search可以非常快的开发出一款搜索应用,APP Search不仅可以很快的生成前端的代码,还可以完成一些后台的相关性的调优,帮助控制搜索相关性的算分,还提供了一些监控方面的功能,帮助更好的去监控实际的转换率。
stackoverflow 用户调查问卷分析
需求分析及架构设计
2019 Stackoverflow Survery
insightsstackoverflow.com/survey/2019
架构设计
- File Input
- CSV Filter
- ES Output
- Reindex
- ingest Pipeline
- Discovery
- Visualization
- Dashboard
数据Extract & Enrichment
构建Insights Dashboard
Dashboard
CodeDemo
sudo bin/logstash -f ./logstash-stackoverflow-survey.conf
PUT final-stackoverflow-survey
{
"mappings": {
"dynamic_templates": [
{
"strings_as_keywords": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
}
]
},
"settings": {
"number_of_replicas": 0
}
}
数字相关
YearsCode
WorkWeekHrs
Age
Age1stCode 16
YearsCodePro
PUT _ingest/pipeline/stackoverflow_pipeline
{
"description": "Pipeline for stackoverflow survey",
"processors": [
{
"split": {
"field": "DatabaseDesireNextYear",
"separator": ";"
}
},
{
"split": {
"field": "DatabaseWorkedWith",
"separator": ";"
}
},
{
"split": {
"field": "DevEnviron",
"separator": ";"
}
},
{
"split": {
"field": "LanguageWorkedWith",
"separator": ";"
}
},
{
"split": {
"field": "MiscTechDesireNextYear",
"separator": ";"
}
},
{
"split": {
"field": "PlatformWorkedWith",
"separator": ";"
}
},
{
"split": {
"field": "PlatformDesireNextYear",
"separator": ";"
}
},
{
"split": {
"field": "WebFrameWorkedWith",
"separator": ";"
}
},
{
"split": {
"field": "WebFrameDesireNextYear",
"separator": ";"
}
},
{
"split": {
"field": "Containers",
"separator": ";"
}
},
{
"script": {
"source": """
try{
ctx.YearsCode = Integer.parseInt(ctx.YearsCode);
}catch(Exception e){
ctx.YearsCode = 0;
}
"""
}
},
{
"script": {
"source": """
try{
ctx.WorkWeekHrs = Integer.parseInt(ctx.WorkWeekHrs);
}catch(Exception e){
ctx.WorkWeekHrs = 0;
}
"""
}
},
{
"script": {
"source": """
try{
ctx.Age = Integer.parseInt(ctx.Age);
}catch(Exception e){
ctx.Age = 0;
}
"""
}
},
{
"script": {
"source": """
try{
ctx.Age1stCode = Integer.parseInt(ctx.Age1stCode);
}catch(Exception e){
ctx.Age1stCode = 0;
}
"""
}
},
{
"script": {
"source": """
try{
ctx.YearsCodePro = Integer.parseInt(ctx.YearsCodePro);
}catch(Exception e){
ctx.YearsCodePro = 0;
}
"""
}
}
]
}
POST _reindex?wait_for_completion=false
{
"source": {
"index": "stackoverflow-survey-raw"
},
"dest": {
"index": "final-stackoverflow-survey",
"pipeline": "stackoverflow_pipeline"
}
}
GET final-stackoverflow-survey/_mapping
相关阅读
本节知识小节
了解了用户调查问卷的背景,也知道从什么地方下载相关的内容,介绍了项目架构和设计,介绍了如何使用Logstash创建一个Pipline,把csv文件写入Elasticsearch,通过DyTemp的方式把所有字符串类型的字段做了合理映射,使他成为一个keyword类型,这样就可以对所有字符串类型的做一个aggregation,同时还通过创建Pipeline,把一些整型的字段合理转换,同时也把string字符串当中一些字符串通过分号分隔,变成字符串数组,方便我们对相关的属性进行termaggregation操作。演示了如何在Kinbana上创建一个markdown,可以针对不同的数据创建可视化报表。
此文章为4月Day17学习笔记,内容来源于极客时间《Elasticsearch 核心技术与实战》