基于ElasticSearch+Vue实现简易搜索

news2024/11/18 7:35:06

基于ElasticSearch+Vue实现简易搜索

一、模拟数据

产品名称描述价格库存数量品牌名称
智能手表智能手表,具有健康跟踪和通知功能。199.991000TechWatch
4K智能电视4K分辨率智能电视,提供出色的画质。699.99500VisionTech
无线耳机降噪无线耳机,提供高品质音频体验。149.99800AudioMasters
笔记本电脑高性能笔记本电脑,配备快速处理器。999.99300TechLaptops
数码相机高分辨率数码相机,支持多种拍摄模式。449.99200PhotoPro
便携式充电器便携式充电器,为移动设备提供电力。29.992000PowerBoost
无线路由器高速无线路由器,适用于大型网络。79.99400NetSpeed
游戏机游戏机,支持多种游戏和娱乐功能。399.99100GameZone
手机壳手机壳,适用于各种手机型号。19.991500PhoneGuard
运动鞋高性能运动鞋,适用于各种运动。79.99800SportsTech
4K超高清显示器4K超高清显示器,提供卓越的图像质量。599.99150UltraView
智能家居设备智能家居设备,实现智能化家居控制。249.99300SmartLiving

二、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>

四、效果图

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1121047.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《低代码指南》——维格云和Airtable的比较

Airtable​ 什么是Airtable​ Airtable 是一个任务管理应用程序,它合并了电子表格、数据存储和模板,以帮助组织构建他们的工作流程。 适用于哪些企业/组织/人群​ 根据 Airtable 网站,该工具被超过 200,000 个组织的团队使用。 维格表与Airtable相比如何​ Airtable作为…

【C语言】善于利用指针(三)

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C语言初步学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读&#xff1a;1. 函数指针1.1 什么使函数指针1.2 用函数指针变量调用函数 2. 返回指针值的函数3. 函数指针数组3.1 实…

asp.net社区医疗辅助诊断网站系统VS开发sqlserver数据库web结构c#编程

一、源码特点 asp.net社区医疗辅助诊断网站系统 是一套完善的web设计管理系统&#xff0c;系统采用mvc模式&#xff08;BLLDALENTITY&#xff09;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver200…

音乐制作软件 Ableton Live 11 Suite mac中文版功能介绍

Ableton Live 11 Suite mac是一款专业级别的音乐制作软件&#xff0c;它提供了多种音乐制作和编辑功能&#xff0c;可以帮助用户创建各种音乐作品。界面简单直观&#xff0c;可以方便地进行各种音乐制作操作。它提供了丰富的音乐制作工具和功能&#xff0c;如录音、采样、编曲、…

C语言实现模拟 strcmp 字符串比较函数,实现字符串大小的比较

完整代码&#xff1a; // 模拟 strcmp 字符串比较函数&#xff0c;实现字符串大小的比较 #include<stdio.h> //strcmp函数是两个字符串自左向右逐个字符相比&#xff08;按 ASCII 值大小相比较&#xff09;&#xff0c;直到出现不同的字符或遇 \0 为止&#xff0c;如果字…

常用Web安全扫描工具合集

漏洞扫描是一种安全检测行为,更是一类重要的网络安全技术,它能够有效提高网络的安全性,而且漏洞扫描属于主动的防范措施,可以很好地避免黑客攻击行为,做到防患于未然。那么好用的漏洞扫描工具有哪些? 1、AWVS Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名…

网站、小程序常见布局样式记录

文章目录 &#x1f380;前言&#xff1a;&#x1f415;网页样式展示小程序&#xff1a;《携程网》&#x1f380;持续更新... &#x1f380;前言&#xff1a; 本篇博客会收藏一些作者见到的网页、小程序页面&#xff0c;目的是用来寻找制作项目网页页面的灵感&#xff0c;有需要…

Java高级编程---Java多线程

Java多线程 线程概述进程线程比较 线程的创建继承Thread类创建多线程实现Runnable接口创建多线程两种实现多线程方式的对比 线程的生命周期及状态转换线程的调度线程的优先级线程休眠线程让步线程插队多线程同步死锁问题 线程概述 计算机能够同时完成多项任务&#xff0c;例如…

[MIT 6.1810]Lab7-networking

Lab7 networking https://pdos.csail.mit.edu/6.828/2023/labs/net.html 目录 Lab7 networking背景驱动程序E1000手册接收描述符发送描述符寄存器约定环形队列 代码实现发送接收坑 背景 为E1000实现驱动&#xff0c;补全kernel/e1000.c中的两个空函数。 为了达成目的&#xff…

【RuoYi移动端】HbuilderX实现底部弹窗示例

一、单选样式弹窗选择 1、View页面代码 <uni-popup ref"textBox" type"bottom"><view class"select_box"><view class"select_row" v-for"(item,index) in status" click"selectClick(item.id)"&g…

FPGA时序分析与约束(6)——综合的基础知识

在使用时序约束的设计过程中&#xff0c;综合&#xff08;synthesis&#xff09;是第一步。 一、综合的解释 在电子设计中&#xff0c;综合是指完成特定功能的门级网表的实现。除了特定功能&#xff0c;综合的过程可能还要满足某种其他要求&#xff0c;如功率、操作频率等。 有…

Fiber Golang:Golang中的强大Web框架

揭示Fiber在Go Web开发中的特点和优势 在不断发展的Web开发领域中&#xff0c;选择正确的框架可以极大地影响项目的效率和成功。介绍一下Fiber&#xff0c;这是一款令人印象深刻的Golang&#xff08;Go语言&#xff09;Web框架。以其飞快的性能和强大的特性而闻名&#xff0c;…

2023-mac brew安装python最新版本,遇见的问题和处理方式

#### 创建Python3.11.6符号链接我现在遇见这个问题了&#xff1a;python --version -bash: python: command not found 192:bin wangyang$ python3 --version Python 3.9.6 192:bin wangyang$ /usr/local/bin/python3 --version Python 3.11.6我要怎么做&#xff0c;我才可以直…

Spring-AOP 讲解

1、为什么会出现AOP思维 我们知道&#xff0c;在我们的项目中&#xff0c;会出现核心代码和非核心代码&#xff0c;对于非核心代码&#xff0c;在各个方法中可能是冗余的&#xff0c;此时为了解决这种非核心代码的冗余以及不方便管理的问题&#xff0c;就出现了AOP思维。 2、…

模拟批量转换和报警功能块(博途SCL源代码)

单通道模拟量转换FC算法和源代码,请参考下面文章链接: PLC模拟量采集算法数学基础(线性传感器)_plc3秒采集一次模拟量_RXXW_Dor的博客-CSDN博客模拟量采集库如何设计,具体算法代码请参看我的另一篇博文:PLC模拟量输入 模拟量转换FC:S_ITR_RXXW_BOSS的博客-CSDN博客_s_i…

路由器的路由过程

大家好&#xff0c;我叫徐锦桐&#xff0c;个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识&#xff0c;还有日常折腾的经验&#xff0c;欢迎大家来访。 路由器是连接不同的局域网的一个设备&#xff0c;它一开始的目的是互联异构网络的。 前言 这里…

langchain agent简单使用;文档总结load_summarize_chain

1、langchain agent简单使用 参考&#xff1a;https://zhuanlan.zhihu.com/p/643868934?utm_id0 from langchain.agents.agent_toolkits import create_python_agent from langchain.agents import load_tools, initialize_agent from langchain.agents import AgentType fr…

【讲座笔记】基于 Apache Calcite 的多引擎指标管理最佳实践|CommunityOverCode Asia 2023 | 字节开源

引言 三个问题 (问题解法) 1套SQL 2种语法 统一SQL的实践案例 虚拟列的实践案例 SQL Define Function 指标管理的实现 在这里插入图片描述

交换机/防火墙-基础配置-23.10.11

1.MAC地址 交换机在给主机之间传递信息包时&#xff0c;通过MAC地址来标识每台主机 主机间发生信息包交换时&#xff0c;交换机就会将通信过的主机的mac地址存下 dis mac-address 交换机转发的数据包中&#xff0c;会包含一个目标MAC&#xff0c;交换机识别数据包中的目标MA…