基于ElasticSearch+Vue实现简易搜索

这篇具有很好参考价值的文章主要介绍了基于ElasticSearch+Vue实现简易搜索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于ElasticSearch+Vue实现简易搜索

一、模拟数据

产品名称 描述 价格 库存数量 品牌名称
智能手表 智能手表,具有健康跟踪和通知功能。 199.99 1000 TechWatch
4K智能电视 4K分辨率智能电视,提供出色的画质。 699.99 500 VisionTech
无线耳机 降噪无线耳机,提供高品质音频体验。 149.99 800 AudioMasters
笔记本电脑 高性能笔记本电脑,配备快速处理器。 999.99 300 TechLaptops
数码相机 高分辨率数码相机,支持多种拍摄模式。 449.99 200 PhotoPro
便携式充电器 便携式充电器,为移动设备提供电力。 29.99 2000 PowerBoost
无线路由器 高速无线路由器,适用于大型网络。 79.99 400 NetSpeed
游戏机 游戏机,支持多种游戏和娱乐功能。 399.99 100 GameZone
手机壳 手机壳,适用于各种手机型号。 19.99 1500 PhoneGuard
运动鞋 高性能运动鞋,适用于各种运动。 79.99 800 SportsTech
4K超高清显示器 4K超高清显示器,提供卓越的图像质量。 599.99 150 UltraView
智能家居设备 智能家居设备,实现智能化家居控制。 249.99 300 SmartLiving

二、python导入脚本

# coding=gbk
import pandas as pd
from elasticsearch import Elasticsearch
from elasticsearch.helpers import streaming_bulk

# 连接到Elasticsearch
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])

# 检查是否成功连接
if es.ping():
    print("Connected to Elasticsearch")
else:
    print("Failed to connect to Elasticsearch")

# 读取Excel文件
data = pd.read_excel('demoData.xls')

# 将DataFrame转换为字典格式
documents = data.to_dict(orient='records')

# 逐个文档导入数据到Elasticsearch
success, failed = 0, 0
total_documents = len(documents)
for doc in documents:
    index_action = {
        '_index': 'ecommerce',  # 修改为你的索引名称
        '_id': doc['产品名称'],  # 使用产品名称作为文档ID
        '_source': doc
    }
    try:
        result = next(streaming_bulk(es, [index_action], index=index_action['_index']))
        success += 1
    except Exception as e:
        print(f"Failed to index document {index_action['_id']}: {e}")
        failed += 1

print(f'Successfully indexed {success} documents, failed to index {failed} documents.')

三、vue代码

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <!-- Import CSS -->
  <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    body {
      background-image: linear-gradient(120deg, #d4fc79 0%, #96e6a1 100%);
    }

    /* 添加上边距样式 */
    .card-container {
      margin-top: 20px;
    }

    /* 设置高亮文字颜色为红色 */
    .highlight-text em {
      color: red;
    }

    /* 样式用于显示产品信息字段 */
    .product-info {
      margin-top: 10px;
      font-weight: bold;
    }
  </style>
</head>

<body>
  <div id="app" style="width: 80%; margin: 0 auto; margin-top: 20px;">
    <h3>基于ElasticSearch+Vue实现简易搜索</h3>
    <el-input v-model="content" placeholder="请输入内容" @input="searchProducts"></el-input>
    <br>
    <br>
    <hr>
    <!-- 显示搜索结果 -->
    <div id="searchResults">
      <el-card v-for="result in searchResults" :key="result._id" class="card-container">
        <div slot="header">
          <strong v-html="result.highlightedProductName" class="highlight-text"></strong>
        </div>
        <div class="product-info">
          产品名称: {{ result.productName }}
        </div>
        <div class="product-info">
          描述: {{ result.productDescription }}
        </div>
        <div class="product-info">
          价格: {{ result.productPrice }}
        </div>
        <div class="product-info">
          库存数量: {{ result.productStock }}
        </div>
        <div class="product-info">
          品牌名称: {{ result.productBrand }}
        </div>
      </el-card>
    </div>
  </div>
</body>
<!-- Import Vue before Element -->
<script src="https://unpkg.com/vue@2/dist/vue.js"></script>
<!-- Import Element UI -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script>
  new Vue({
    el: '#app',
    data: function () {
      return {
        content: "",
        searchResults: []
      }
    },
    methods: {
      searchProducts: function () {
        // 构建Elasticsearch查询
        const query = {
          query: {
            match: {
              "产品名称": this.content  // 使用正确的字段名
            }
          },
          highlight: {
            fields: {
              "产品名称": {}  // 高亮 "产品名称" 字段
            }
          }
        };

        // 发起HTTP请求搜索文档
        fetch("http://localhost:9200/ecommerce/_search", {
          method: "POST",
          headers: {
            "Content-Type": "application/json"
          },
          body: JSON.stringify(query)
        })
          .then(response => response.json())
          .then(data => {
            this.displaySearchResults(data);
          })
          .catch(error => {
            console.error("Error:", error);
          });
      },

      displaySearchResults: function (response) {
        this.searchResults = response.hits.hits.map(function (hit) {
          return {
            highlightedProductName: hit.highlight["产品名称"][0],  // 使用正确的字段名
            productName: hit._source.产品名称,  // 使用正确的字段名
            productDescription: hit._source.描述,  // 使用正确的字段名
            productPrice: hit._source.价格,  // 使用正确的字段名
            productStock: hit._source.库存数量,  // 使用正确的字段名
            productBrand: hit._source.品牌名称,  // 使用正确的字段名
            _id: hit._id
          };
        });
      }
    }
  })
</script>

</html>

四、效果图

elasticsearch 和 vue instant search,elasticsearch,vue.js,大数据
elasticsearch 和 vue instant search,elasticsearch,vue.js,大数据文章来源地址https://www.toymoban.com/news/detail-763110.html

到了这里,关于基于ElasticSearch+Vue实现简易搜索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch - 基于 拼音分词器 和 IK分词器 模拟实现“百度”搜索框自动补全功能

    目录 一、自动补全 1.1、效果说明 1.2、安装拼音分词器 1.3、自定义分词器 1.3.1、为什么要自定义分词器 1.3.2、分词器的构成 1.3.3、自定义分词器 1.3.4、面临的问题和解决办法 问题 解决方案 1.4、completion suggester 查询 1.4.1、基本概念和语法 1.4.2、示例 1.4.3、示例(黑马旅游)

    2024年02月07日
    浏览(47)
  • vue-springboot基于elasticsearch的高校科研期刊信息管理系统mb8od

    当游客打开系统的网址后,首先看到的就是首页界面。在这里,游客能够看到高校科研信息管理系统的导航条显示首页、科研文件、核心期刊、合同模板、各类表格、科研讲堂、科研软件、后台管理、个人中心等。 管理员登录进入高校科研信息管理系统的实现可以查看系统首

    2024年02月03日
    浏览(49)
  • Elasticsearch 基于地理位置的搜索查询

             ES为用户提供了基于地理位置的搜索功能。它主要支持两种类型的地理查询:一种是地理点(geo_point),即经纬度查询,另一种是地理形状查询(geo_shape),即支持点,线,圆形和多边形等查询。         从实用性来说,地理点(即geo_point)数据类型的使用更多一些,

    2024年02月12日
    浏览(41)
  • 美团外卖搜索基于Elasticsearch的优化实践

    美团外卖搜索工程团队在Elasticsearch的优化实践中,基于Location-Based Service(LBS)业务场景对Elasticsearch的查询性能进行优化。该优化基于Run-Length Encoding(RLE)设计了一款高效的倒排索引结构,使检索耗时(TP99)降低了84%。本文从问题分析、技术选型、优化方案等方面进行阐述

    2023年04月08日
    浏览(55)
  • 了解基于Elasticsearch 的站内搜索,及其替代方案

    对于一家公司而言,数据量越来越多,如果快速去查找这些信息是一个很难的问题,在计算机领域有一个专门的领域IR(Information Retrival)研究如何获取信息,做信息检索。在国内的如百度这样的搜索引擎也属于这个领域,要自己实现一个搜索引擎是非常难的,不过通过Elas

    2024年02月03日
    浏览(37)
  • Elasticsearch:运用 Go 语言实现 Elasticsearch 搜索 - 8.x

    在我之前的文章 “Elasticsearch:Go 客户端简介 - 8.x”,我对 Elasticsearch golang 客户端做了一个简单的介绍。在今天的这篇文章中,我将详细介绍如何使用这个客户端来一步一步地连接到 Elasticsearch,进而创建索引,搜索等。关于 golang 客户端的使用,完整的文档托管在 GitHub 和

    2024年01月16日
    浏览(36)
  • 【独家深度】Gitlab基于Elasticsearch的站内搜索设计

    通过分析Gitlab的站内搜索设计,借鉴其设计经验,来改进自己的站内搜索方案,包括领域对象划分,索引设计,权限控制设计。 这可能是国内第一篇详细解剖Gitlab站内搜索设计实现的文章。 Gitlab的免费版本采用的是Postgresql的FTS(full text search)进行搜索。 Gitlab的白金版本才支

    2024年02月03日
    浏览(36)
  • 基于PHP和Elasticsearch的实时搜索技术应用

    随着互联网的发展和信息的爆炸增长,用户对于快速、精准的搜索需求也越来越高。 传统的数据库查询方式已经无法满足这种需求,而Elasticsearch作为一款开源的实时分布式搜索和分析引擎,正逐渐成为业界广泛使用的解决方案之一。 在本文中,我们将使用PHP作为后端语言,

    2024年02月08日
    浏览(47)
  • 整合Elasticsearch实现商品搜索

    Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎。 它能从项目一开始就赋予你的数据以搜索、分析和探索的能力,可用于实现全文搜索和实时数据统计。 Elasticsearch6.2.2的zip包,并解压到指定目录,下载地址:Elasticsearch 6.2.2 | Elastic 在elasticsearch-6.2.2bin目录下执

    2024年02月22日
    浏览(39)
  • ElasticSearch近实时搜索的实现

    有经验的程序员一定知道,在做并发编程时,控制可变数据的并发访问是个难题。古往今来,各种粗细粒度的锁,信号量,Actor模型等概念层出不穷。而另一流派函数式编程更为彻底,尤其是纯函数式比如Haskell,用不可变数据来彻底解决这个问题。 在ElasticSearch这样主要服务

    2024年04月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包