使用Elasticsearch快速搭建食谱搜索系统

简介: 搜索是一个网站的基础功能,一个好的搜索系统可以直接促进页面访问量的提升,目前流行的搜索系统方案都是基于开源的Elasticsearch和Solr搭建。本文以食谱搜索场景为例,介绍如何利用阿里云Elasticsearch快速搭建一个搜索系统。

搜索是一个网站的基础功能,一个好的搜索系统可以直接促进页面访问量的提升,目前流行的搜索系统方案都是基于开源的Elasticsearch和Solr搭建。本文以食谱搜索场景为例,介绍如何利用阿里云Elasticsearch快速搭建一个搜索系统。 阅读本文,需要先理解了Elasticsearch相关概念,如索引、类型、文档、映射等。 ### 开通阿里云Elasticsearch服务 由于阿里云Elasticsearch目前支持的网络类型只有用户自有的专有网络(VPC),所以在开通Elasticsearch服务时,如果没有实现创建好的专有网络可选择,则会默认创建一个专有网络。 开通好Elasticsearch服务之后,可能会遇到一个新的问题,即业务系统部署在经典网络的ECS中,默认是无法访问专有网络的,所以需要通过专有网络中提供的Classiclink 的功能,打通经典网络访问专有网络的链路。   完成上述步骤后,可以在业务系统所在的ECS上使用curl命令进行测试,也可以在阿里云Elasticsearch集成的Kibana控制台Dev Tools界面进行测试。 ### 食谱搜索系统设计 如上图所示,爬虫从网上抓取食谱数据,先经过关键词提取和加工,得到搜索源数据,然后通过索引构建器调用Elasticsearch提供的Rest API完成索引的创建。同时,提取出食材名称和食谱标签静态数据,用于后续搜索过程中,调Elasticsearch服务前的业务判断。 ### 数据准备及搜索场景设计 如下是一个典型的经过爬虫抓取、加工处理后用于搜索的食谱数据,索引构建器基于该数据结构创建索引和文档。 ```json  {     "recipeName": "水煮牛肉 ",                            //食谱名称     "mainFood": "莴笋尖,瘦牛肉",                          //主料     "subFood": "花椒面,菜籽油,豆瓣酱,蒜,鸡精",             //配料     "recipeTag": "肉类,川菜,朋友聚餐",                    //食谱标签     "viewNum": "3155800",                               //浏览次数     "cookingSpareTime": "10-30分钟"                     //烹饪耗时 } ``` 设计的搜索场景如下:      - 场景1,根据食谱名称精确匹配 输入    水煮牛肉 输出    水煮牛肉食谱 - 场景2,根据单个食材名称模糊匹配主料和配料,得到包含该食材的食谱列表 输入    牛肉 输出    相关食谱列表 - 场景3,根据多个名称组合,可能是食材名称/食谱名称/食谱标签,匹配相关食谱列表 输入    牛肉 川菜 输出    相关食谱列表 - 场景4,根据食谱标签匹配包含该标签的食谱列表 输入    川菜 输出    包含“川菜”标签的食谱列表 - 场景5,搜索出浏览次数TOP10的食谱 ### 索引创建 阿里云Elasticsearch默认关闭了自动创建索引功能,需要先创建好索引。索引的分析器使用阿里云Elasticsearch服务预置的IK Analyzer插件,该插件也是开源社区热门的中文分词分析器,结合食谱搜索的场景,使用ik_smart分析器对文本进行粗粒度的拆分。 根据搜索场景的需求,需要创建一个索引(Index),包含一个类型(Type),其中食谱名称(recipeName)、主要食材(mainFood)、辅助食材(subFood)、食谱标签(recipeTag)都是可被分词索引的,浏览次数(viewNum)可被索引但不进行分词,剩余不用于搜索的字段可不进行索引。 创建索引的命令如下: ```json curl -X PUT 'es-cn-xxx.elasticsearch.aliyuncs.com:9200/recipe' -d ' {   "mappings": {     "dish": {       "properties": {         "recipeName": {           "type": "string",           "index": "analyzed",           "analyzer": "ik_smart"         },         "mainFood": {           "type": "string",           "index": "analyzed",           "analyzer": "ik_smart"         },         "subFood": {           "type": "string",           "index": "analyzed",           "analyzer": "ik_smart"         },         "recipeTag": {           "type": "string",           "index": "analyzed",           "analyzer": "ik_smart"         },         "viewNum": {           "type": "integer",           "index": "not_analyzed"         },         "cookingSpareTime": {           "type": "string",           "index": "not_analyzed"         }       }     }   } }' ``` ### 索引文档创建 本文所设计的食谱搜索系统是一个实时的搜索系统,爬虫会不断的抓取数据,经过提取加工后由索引构建器调API创建文档,这样也能发挥ElasticSearch在实时搜索方面的优势。 如果有需要在ElasticSearch中大批量创建文档的需求,可以选择使用阿里云数据集成服务从OSS中抽取服务导入到ElasticSearch。 文档创建命令如下: ```json PUT 'es-cn-xxx.elasticsearch.aliyuncs.com:9200/recipe/dish/1' -d ' {     "subFood": "花椒面,菜籽油,豆瓣酱,蒜,鸡精",      "collectNum": "189919",      "mainFood": "莴笋尖,瘦牛肉",      "recipeName": "水煮牛肉 ",      "viewNum": "3155800",      "recipeTag": "肉类,川菜,朋友聚餐",     "cookingSpareTime": "10-30分钟" }'   ``` ### 搜索场景实现 ``` 场景1,根据食谱名称精确匹配     场景2,根据单个食材名称模糊匹配主料和配料,得到包含该食材的食谱列表     场景3,根据多个名称组合,可能是食材名称/食谱名称/食谱标签,匹配相关食谱列表 场景4,根据食谱标签匹配包含该标签的食谱列表 ``` 针对以上场景的需求,搜索后台的逻辑如下图所示: 各个场景下的搜索过程对应Elasticsearch执行命令分别如下: - 场景1. ```json GET 'es-cn-xxx.elasticsearch.aliyuncs.com:9200/recipe/dish/_search' -d ' {   "query" : { "term" : { "recipeName" : "水煮牛肉" }} }' ``` - 场景2. ```json GET 'es-cn-xxx.elasticsearch.aliyuncs.com:9200/recipe/dish/_search' -d ' {   "query" : {     "multi_match": {          "query":    "牛肉",          "fields":   [ "mainFood", "subFood" ]      }   } }' ``` - 场景3. ```json GET 'es-cn-xxx.elasticsearch.aliyuncs.com:9200/recipe/dish/_search' -d ' {   "query" : {     "multi_match": {          "query":    "牛肉 川菜",          "fields":   [ "recipeName", "mainFood", "subFood", "recipeTag" ]      }   } }' ``` - 场景4. ```json GET 'es-cn-xxx.elasticsearch.aliyuncs.com:9200/recipe/dish/_search' -d ' {   "query" : { "match" : { "recipeTag" : "川菜" }} }' ``` - 场景5,搜索出流量次数TOP100的食谱 该场景需要用到搜索排序,并指定搜索返回的记录数是100(默认为10)。 ```json GET 'es-cn-xxx.elasticsearch.aliyuncs.com:9200/recipe/dish/_search' -d ' {   "size": 100,   "sort": { "viewNum": { "order": "desc" } } }' ``` ##加入钉钉技术讨论群

dingQR

阿里云Elasticsearch已正式发布啦,Elastic开源官方联合开发,集成5.5商业版本XPack功能,欢迎开通使用。 [点击了解更多产品信息](https://data.aliyun.com/product/elasticsearch)

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
3月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
3月前
|
存储 Linux iOS开发
Elasticsearch Enterprise 9.1.5 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 9.1.5 (macOS, Linux, Windows) - 分布式搜索和分析引擎
362 0
|
4月前
|
JSON 监控 Java
Elasticsearch 分布式搜索与分析引擎技术详解与实践指南
本文档全面介绍 Elasticsearch 分布式搜索与分析引擎的核心概念、架构设计和实践应用。作为基于 Lucene 的分布式搜索引擎,Elasticsearch 提供了近实时的搜索能力、强大的数据分析功能和可扩展的分布式架构。本文将深入探讨其索引机制、查询 DSL、集群管理、性能优化以及与各种应用场景的集成,帮助开发者构建高性能的搜索和分析系统。
364 0
|
8月前
|
JSON 安全 数据可视化
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
Kibana 是 Elastic Stack(原 ELK Stack)中的核心数据可视化工具,主要与 Elasticsearch 配合使用,提供强大的数据探索、分析和展示功能。elasticsearch安装在windows上一般是zip文件,解压到对应目录。文件,elasticsearch8.x以上版本是自动开启安全认证的。kibana安装在windows上一般是zip文件,解压到对应目录。elasticsearch的默认端口是9200,访问。默认用户是elastic,密码需要重置。
4477 0
|
8月前
|
存储 安全 Linux
Elasticsearch Enterprise 9.0 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 9.0 (macOS, Linux, Windows) - 分布式搜索和分析引擎
369 0
|
8月前
|
存储 Linux iOS开发
Elasticsearch Enterprise 8.18 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 8.18 (macOS, Linux, Windows) - 分布式搜索和分析引擎
332 0
|
人工智能 自然语言处理 搜索推荐
云端问道12期实操教学-构建基于Elasticsearch的企业级AI搜索应用
本文介绍了构建基于Elasticsearch的企业级AI搜索应用,涵盖了从传统关键词匹配到对话式问答的搜索形态演变。阿里云的AI搜索产品依托自研和开源(如Elasticsearch)引擎,提供高性能检索服务,支持千亿级数据毫秒响应。文章重点描述了AI搜索的三个核心关键点:精准结果、语义理解、高性能引擎,并展示了架构升级和典型应用场景,包括智能问答、电商导购、多模态图书及商品搜索等。通过实验部分,详细演示了如何使用阿里云ES搭建AI语义搜索Demo,涵盖模型创建、Pipeline配置、数据写入与检索测试等步骤,同时介绍了相关的计费模式。
403 3
|
人工智能 算法 API
构建基于 Elasticsearch 的企业级 AI 搜索应用
本文介绍了基于Elasticsearch构建企业级AI搜索应用的方案,重点讲解了RAG(检索增强生成)架构的实现。通过阿里云上的Elasticsearch AI搜索平台,简化了知识库文档抽取、文本切片等复杂流程,并结合稠密和稀疏向量的混合搜索技术,提升了召回和排序的准确性。此外,还探讨了Elastic的向量数据库优化措施及推理API的应用,展示了如何在云端高效实现精准的搜索与推理服务。未来将拓展至多模态数据和知识图谱,进一步提升RAG效果。
458 1
|
9月前
|
安全 Java Linux
Linux安装Elasticsearch详细教程
Linux安装Elasticsearch详细教程
1801 64
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
523 5

热门文章

最新文章

相关产品

  • 检索分析服务 Elasticsearch版