Elasticsearch实现hotel索引库自动补全、拼音搜索功能

Elasticsearch实现hotel索引库自动补全、拼音搜索功能

 在这里边我们有两个字段需要用拼音分词器,一个name字段,一个all字段。 然后我们还需要去实现自动补全,而自动补全对应的字段必须使用completion类型。目前我们酒店里面所有的字段都采用的是这种常规类型,没有completion 类型。所以我们一定要在索引库里面加一个新的字段,比如说我起个名字就叫suggestion。

这个字段它必须采用completion 类型,并且我们将来要去使用拼音分词器,因为我们肯定希望将来要根据拼音首字母去做自动补全,不仅仅是根据英文单词,那么这些功能功能都做完了以后,我们还需要去改我们的java代码。

你索引库里边字段增加了,你的java代码是不是也要增加?最后我们就可以重新去导入数据,测试这个拼音分词的,还有自动补全的功能了。

下边我们就逐一的来去做一下。首先第一步我们去修改酒店索引库数据结构。

 sighting就是来定义索引库的分词器的,大家可以看到分词器里面,

Keyword不分词:它的词条直接作为一个整体,然后再去用拼音,因为我将来参与自动补全的,肯定就是固定的一个一个的词条。我们会把这些词条放到数组当中。 因此它本身就是个词条,还有必要再分词吗? 没必要了,所以我们就把它直接做成Keyword类型,不分词,然后再去用这个拼音分词器转成拼音就可以了。

将来我们去做全文检索的,应该用text_analyzer。 如果说做自动补全的,用completion_analyzer

接下来就是定义酒店的字段了。 需要注意的是,我们把这个name字段,它的分词器定义成了text_analyzer   ,搜索的时候我们 不能用text_analyzer,应该用这个传统的分词器,所以我们用了ik_smart,与此类似的,还有我们的这个all字段,它也是在创建索引时用text_analyzer ,然后在搜索时用ik_smart。 最后我们还添加了一个suggestion字段,这个字段将来是来自自动补全的,所以它的类型就定义成了completion类型。那他用的分词器是completion_analyzer

先删除之前的索引库,再设置如下:DELETE /hotel

// 酒店数据索引库
PUT /hotel
{
  "settings": {
    "analysis": {
      "analyzer": {
        "text_anlyzer": {
          "tokenizer": "ik_max_word",
          "filter": "py"
        },
        "completion_analyzer": {
          "tokenizer": "keyword",
          "filter": "py"
        }
      },
      "filter": {
        "py": {
          "type": "pinyin",
          "keep_full_pinyin": false,
          "keep_joined_full_pinyin": true,
          "keep_original": true,
          "limit_first_letter_length": 16,
          "remove_duplicated_term": true,
          "none_chinese_pinyin_tokenize": false
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "id":{
        "type": "keyword"
      },
      "name":{
        "type": "text",
        "analyzer": "text_anlyzer",
        "search_analyzer": "ik_smart",
        "copy_to": "all"
      },
      "address":{
        "type": "keyword",
        "index": false
      },
      "price":{
        "type": "integer"
      },
      "score":{
        "type": "integer"
      },
      "brand":{
        "type": "keyword",
        "copy_to": "all"
      },
      "city":{
        "type": "keyword"
      },
      "starName":{
        "type": "keyword"
      },
      "business":{
        "type": "keyword",
        "copy_to": "all"
      },
      "location":{
        "type": "geo_point"
      },
      "pic":{
        "type": "keyword",
        "index": false
      },
      "all":{
        "type": "text",
        "analyzer": "text_anlyzer",
        "search_analyzer": "ik_smart"
      },
      "suggestion":{
          "type": "completion",
          "analyzer": "completion_analyzer"
      }
    }
  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

暴雨信息| AI“速”不可挡,倒逼算力巨变!

「 “当某一天人工智能的智慧超越人类,你会发现人工智能将会以迅雷不及掩耳之势改变世界,那个改变是不可逆的,极其迅速。” 」 暴雨信息副董事长孙辉在“IPF2024”上的这个观点,正是当今世界在AI影响下急速前行的真实写照。 记得…

高压、单通道、轨对轨输入输出功率运算放大器RS8471

RS8471是一款高压、单通道、轨对轨输入输出的功率运算放大器,它的工作电压范围在4.5V到24V,最大峰值输出电流2.5A,失调电压为3mV,增益带宽积为25MHz,并提供65V/us的高压摆率,确保输出信号快速建立”,这些特…

[Java EE] 多线程(五):单例模式与阻塞队列

1. 单例模式 单例模式是校招中最长考的设计模式之一,首先我们来谈一谈什么是设计模式: 设计模式就好像象棋中的棋谱一样,如果红方走了什么样的局势,黑方就有一定地固定地套路,来应对这样的局势,按照固定地套路来,可以保证在该局势下不会吃亏. 软件开发也是同样的道理,有很多…

(十二)Servlet教程——HttpServletResponse接口

HttpServletResponse接口继承自ServletResponse接口,HttpServletResponse用来封装HTTP响应消息,简称response对象。 每次请求一个Servlet,Servlet容器就会针对每次请求创建一个response对象,并把它作为参数传递给Servlet的service…

Linux网络-文件传输协议之FTP服务(附带命令及截图)

目录 一.FTP简介 二.FTP的数据模式 1.主动模式 2.被动模式 3.两种模式比较 三.安装配置vsftpd 1.安装vsftpd 1.1.安装前关闭防火墙 1.2.安装vsftpd 1.3.查看 1.4.备份 2.配置 3.重启后生效 四.相关实验 1.以win为例 1.1.设置并测试测试连通性 1.2.在终端里创建…

js逆向进阶篇-某团酒店

提示!本文章仅供学习交流,严禁用于任何商业和非法用途,未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,如有侵权,可联系本文作者删除! 案例分析: 先来看看请求中有哪些参数是需要我们逆向,如下: mtgsig、fp、roh…

Java包装类,128陷阱

包装类 基本数据类型都有自己对应的包装类,因为Java本质是面向对象编程的,一切的内容在Java看来都是对象 但是基本数据类型没有类,也没有对象,这样就有了矛盾 所以诞生了基本类型的包装类 基本数据类型: byte,short,…

知乎热议:未来几年,AI技术在科研领域将有哪些新的发展趋势或突破?

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 一年多以来,各种国内外的AI模型和应用应接不暇,从刚开始ChatGPT一家独大,到现在的百花齐放,各种AI模型各有千秋,一时…

星尘智能 AI 机器人 S1——国产机器人的巅峰之作

AI智能机器人真的太炸裂了 国产科技威武-CSDN直播AI智能机器人真的太炸裂了 国产科技威武https://live.csdn.net/v/382519 最近发现了一个国产的机器人,真的让人惊叹不已!它就是星尘智能 AI 机器人 S1! 这个机器人简直太牛逼了!…

Stable Diffusion 参数介绍及用法

大模型 CheckPoint 介绍 作用:定调了作图风格,可以理解为指挥者 安装路径:models/Stable-diffusion 推荐: AnythingV5Ink_v32Ink.safetensors cuteyukimixAdorable_midchapter2.safetensors manmaruMix_v10.safetensors counterf…

2024年的Java版本选择?java 17 安装

文章目录 2024年的Java版本选择?java 1.8 和 java17 什么区别?java 17 安装windows 11安装java 17C:\Program Files\Common Files\Oracle\Java\javapath是什么 2024年的Java版本选择? 3年前,java 1.8是市场主流(还有一…

STM32用HAL库函数实现硬件IIC

/*出处:【STM32入门教程-2024】第12集 IIC通信与温湿度传感器AHT20(DHT20)_哔哩哔哩_bilibili */ AHT20驱动 这篇笔记我主要介绍代码实现,想要了解原理的请自己看视频,我不过多赘述了。 AHT20通信数据帧格式: ①对照手册上的通…

面对网络安全,做好风险评估对企业会带来哪些帮助

随着信息技术的飞速发展,网络安全问题日益凸显,成为企业不容忽视的重要议题。企业作为社会经济活动的主要参与者,其网络安全不仅关系到自身的生存与发展,更与国家的经济安全、社会稳定息息相关。因此,企业必须高度重视…

K8s: Prometheus 服务结构以及基础抓取数据服务部署

Prometheus 发布应用之后,就有持续运维的事情,就是平台监控Prometheus 是一个云原生的日志监控平台,是一个实时标准的一个技术它是著名的 cncf 里的一个重要的开源项目 上面整个图片是在云原生应用及K8s应用架构下的一个日志监控的一个标准的…

ezplot--Matlab学习

目录 一、代码 二、效果 ​编辑 三、ezplot讲解 四、如何自定义一个函数 一、代码 clc; clear; t0:32; x4(t) cos(2*pi*t/4).*sin(2*pi*t/4); x8(t) cos(2*pi*t/8).*sin(2*pi*t/8); x16(t) cos(2*pi*t/16).*sin(2*pi*t/16); subplot(3,1,1) ezplot(x4,[0,32]); subplot…

《软件设计师教程:数据库系统基础知识大总结》

​ 个人主页:李仙桎 🔥 个人专栏: 《软件设计师》 ⛺️生活的理想,就是为了理想的生活! ​ ⛺️前言:各位铁汁们好啊!!!今天继续正式学习中级软件设计师考试相关的内容,后续不断更新…

python学习笔记B-11:序列结构之列表--二维列表的遍历和生成式

二维列表的遍历方式,使用双层for循环,遍历索引号。 二维列表的生成式,也是使用类似双层循环的形式生成。 print("##初始化二维列表,每个元素就是1个列表") lst [["东方延续","太空军自然选择号舰长&qu…

【AI心理咨询应用】继Woebot之后,国内诞生的“LLM+CBT”应用:白小喵

导言 AI认知行为疗法(Cognitive Behavioral Therapy,CBT)早在2017年便有了首例,即美国知名CBT治疗机器人Woebot。 然而,Woebot在CBT的完整落地上仍有缺陷问题,LLM的出现促进了对该问题的解决,…

typeScript 安装

1、安装typescript 安装npm i -g typescript 查看是否安装成功 tsc -v 2、使用ts // 浏览器不支持ts 需要编译成 es5 let str: string ts 在终端输入 tsc index.ts 会将其生成一个对应的index.js文件 在电脑上首次使用TS的时候,执行TS 的命令的时候报错 打开PowerS…

RustGUI学习(iced)之小部件(三):如何使用下拉列表pick_list?

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述…