一、了解数据及建模

实验使用的数据是类Airbnb网站上的房屋信息,结构如下所示:

数据建模:
自定义分词器,以实现搜索时的自动补全功能,针对不同的字段定义不同的数据类型,以达到最优的效果:例如dynamic设置为false,对于不需要分词的字段直接设置类型为keyword,不需要检索的字段index设置为false等等。附上具体配置以供参考:

PUT testairbnb
{"settings": {"index": {"number_of_shards": 1,"number_of_replicas": 0,"analysis": {"analyzer": {"autosuggest_analyzer": {"filter": ["lowercase","asciifolding","autosuggest_filter"],"tokenizer": "standard","type": "custom"},"ngram_analyzer": {"filter": ["lowercase","asciifolding","ngram_filter"],"tokenizer": "standard","type": "custom"}},"filter": {"autosuggest_filter": {"max_gram": "20","min_gram": "1","token_chars": ["letter","digit","punctuation","symbol"],"type": "edge_ngram"},"ngram_filter": {"max_gram": "9","min_gram": "2","token_chars": ["letter","digit","punctuation","symbol"],"type": "ngram"}}}}},"mappings": {"doc": {"dynamic": false,"properties": {"accommodates": {"type": "integer"},"bathrooms": {"type": "integer"},"bed_type": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"bedrooms": {"type": "integer"},"beds": {"type": "integer"},"date_from": {"type": "date","format": "yyyyMMdd"},"date_to": {"type": "date","format": "yyyyMMdd"},"has_availability": {"type": "boolean"},"host_image": {"type": "keyword","ignore_above": 256,"index": false},"host_name": {"type": "text","analyzer": "autosuggest_analyzer","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"image": {"type": "keyword","ignore_above": 256,"index":false},"listing_url": {"type": "keyword","ignore_above": 256},"location": {"type": "geo_point"},"name": {"type": "text","analyzer": "autosuggest_analyzer","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"price": {"type": "float"},"property_type": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"room_type": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}}
}

二、导入数据

因为数据为csv格式,所有可以直接用csv插件将数据导入到es中。配置如下:

input{file {path => "/home/wfs/project/airbnb/airbnb.csv"sincedb_path => "/dev/null"start_position => "beginning"}
}filter{csv{columns => ["accommodates","bathrooms","bed_type","bedrooms","beds","date_from","date_o","date_rom","date_to","has_availability","host_image","host_name","image","listing_url","location","name","price","property_type","room_type"]}mutate{remove_field=>["message"]lowercase=>["has_availability"]}
}
output{elasticsearch{hosts => ["192.168.20.101:9200","192.168.20.102:9200"]index => "testairbnb"user => "elastic"password => "123456"}stdout{codec=>rubydebug}
}

使用lowercasehas_availability字段内容转换为小写

注意数据在导入es后,通过kibna查看会发现imagehost_image字段还是以url的形式存在,我们需要做进一步的格式处理来实现以图片的形式存在的效果。

imagehost_image字段做如下处理:

listing_url 字段做如下处理:

最后实现的效果如下所示:

然后就可以针对不同的条件做搜索查询了。

三、搭建搜索界面

现在就可以通过ReactiveSearch来搭建一个简易的搜索界面了
ReactiveSearch主页:https://opensource.appbase.io/reactive-manual/
github地址:https://github.com/appbaseio/reactivesearch
demo: https://github.com/appbaseio-apps/airbeds

安装:nodejs、yarn

安装依赖关系:
# yarn启动:默认3000端口
# yarn start

效果图:

这样就可以通过指明时间、价格等条件开进行搜索了。

配置说明:
从github上下载demo包:

git clone https://github.com/appbaseio-apps/airbeds

修改配置连接到es:

# cd airbeds/src/
# ls
App.css  App.js  App.test.js  index.css  index.js  logo.svg  registerServiceWorker.js

修改App.js文件,主要配置如下:

修改es配置文件:

# tail -3 elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: X-Requested-With, X-Auth-Token, Content-Type, Content-Length, Authorization, Access-Control-Allow-Headers, Accept
#修改es所有节点,然后重启服务

自定义组件:
ReactiveSearch主页上有对每个组件的详细说明及样例,可以直接使用,例如:

打包:
可以将调试好的项目进行打包yarn build,打包完成后将build放到任意有http服务的地方就可以运行。
package.json文件”homepage“设置为空
打包:yarn build
打包到build文件夹下,这样直接将build文件夹的文件放到httph或者nginx家目录下就可以直接80端口访问了。

ELK实践(一)使用es搭建商品搜索项目相关推荐

  1. ElasticSearch商城商品搜索实战

    在前面文章中主要是对ES的一个入门,那么在生产环境中结合业务ES到底是如何使用的呢? 本文将讲解电商品平台商城系统如何使用ES做商品搜索功能. 如何达到更高效的分词 : 怎么分词 : 分词器的使用 : ...

  2. Elasticsearch构建商品搜索系统

    搜索这个特性可以说是无处不在,现在很少有网站或者系统不提供搜索功能了,所以,即使你不是一个专业做搜索的程序员,也难免会遇到一些搜索相关的需求.搜索这个东西,表面上看功能很简单,就是一个搜索框,输入关键 ...

  3. 整合Elasticsearch实现商品搜索

    整合Elasticsearch实现商品搜索 本文主要讲解mall整合Elasticsearch的过程,以实现商品信息在Elasticsearch中的导入.查询.修改.删除为例. 项目使用框架介绍 El ...

  4. 搜索推荐系统[10]项目实战系列Z1:手把手教学(商品搜索系统、学术文献检索)语义检索系统搭建、召回排序模型详解。

    搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排).系统架构.常见问题.算法项目实战总结.技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排 ...

  5. ELK结合Beats工具的搭建使用(Metricbeat、Filebeat、Topbeat)

    ELK之间的合作机制: L(Logstash)作为信息收集者,主要是用来对日志的搜集.分析.过滤,支持大量的数据获取方式,一般工作方式为c/s架构,client端安装在需要收集日志的主机上,serve ...

  6. 京东亿级商品搜索核心技术解密

    声明:本文来自京东张开涛的微信公众号(kaitao-1234567),授权CSDN转载,如需转载请联系作者. 作者:王春明,现任京东搜索平台部负责人,2011年加入京东搜索团队,期间一直负责京东搜索引 ...

  7. Django项目实战——14—(列表页热销排行、商品搜索、Haystack建立数据索引、渲染商品搜索结果、商品详情页)

    1.列表页热销排行 根据路径参数category_id查询出该类型商品销量前二的商品. 使用Ajax实现局部刷新的效果. 查询列表页热销排行数据 请求方式 请求参数:路径参数 响应结果:JSON {& ...

  8. ELK本地(win10)搭建

    ELK本地(win10)搭建 下载 ElasticSearch安装 Elasticsearch核心概念 Logstash安装 Kibana安装 下载 ElasticSearch 分布式.RESTful ...

  9. 微服务商城系统(六)商品搜索 SpringBoot 整合 Elasticsearch

    文章目录 一.Elasticsearch 和 IK 分词器的安装 二.Kibana 使用 三.数据导入 Elasticsearch 1.SpringData Elasticsearch 介绍 2.搜索 ...

最新文章

  1. Python两个内置函数——locals 和globals
  2. docker helowin 迁移_docker-compose 安装 oracle_11g_r2 并实现数据持久化
  3. nginx 如何处理请求系列1-Nginx安装
  4. jvm内存配置参数_性能测试连载 (23)jvm内存参数设置
  5. Attachment rename issue in Faas
  6. CF1063C Dwarves, Hats and Extrasensory Abilities
  7. 模板:割点、桥与双连通
  8. 如何使用单例EJB和MBean构建和清除参考数据缓存
  9. 个人从源码理解JIT模式下angular编译AppModule的过程
  10. 动态路由下的导航守卫--(to,from,next)
  11. 易语言静态连接器提取_vc98linker修复静态|易语言vc98linker静态连接器迷你版_最火软件站...
  12. FAT32文件系统结构
  13. 芭蕉树上第十八根芭蕉-- Qt图片绘图类QPixmap/QImage/QPicture
  14. 强强联合丨谱尼测试与北大医疗鲁中医院开启战略合作新征程
  15. html5 扫描条码,原 HTML5+规范:barcode(条码扫描)
  16. 支持随时随地一键开会,华为云会议场景适用性更强!
  17. kermit的安装、配置、使用等
  18. 远程桌面设置分辨率的步骤
  19. 【转】经典论文翻译导读之《A Bloat-Aware Design for Big Data Applications》
  20. PCIe扫盲——PCI总线基本概念

热门文章

  1. 走进沃尔玛物流EDI
  2. 苹果手机安装fiddler证书抓包https流程
  3. 在Magento产品分类页面创建推荐产品(Featured Products)
  4. rosbag录制问题:/use_sim_time set to true and no clock published. Still waiting for valid time...
  5. 自然辩证法 专题4.5测试题
  6. 景安服务器密码修改,[景安网络]提示页
  7. 稳稳压二极管原理及主要参数
  8. 制造费用分配方法(一)
  9. 假设银行一年整存零取的月息为1.875%(年息为12*1.875%,年息按复利计算),现在某人手头有一笔钱,他打算在今后5年中,每年年底取出1000元作为孩子来年的教育金,到第5年孩子毕业时刚好取完这
  10. 【功能规格说明书】命劫开发