ES拼音分词自动补全实现
#测试拼音分词
POST /_analyze
{
"text":"如家酒店真不错",
"analyzer": "pinyin"
}
#这里把拼音的首字母放到这里,也说明了这句话没有被分词,而是作为一个整体出现的
#还把每一个字都形成了一个拼音,这也没什么用 大多数情况下我们想用中文搜索#自定义分词器 创建test索引库的时候指定字段使用自定义的分词
PUT /test
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer":{
"tokenizer":"ik_max_word",
"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": {
"name":{
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}#删除索引库
DELETE /test#查询索引库
GET /test
#在分词分词的汉字拼音都有,而且还有分词的首字母拼音
POST /test/_analyze
{
"text":["如家酒店真不错"],
"analyzer": "my_analyzer"
}#在索引库test中插入一些文档
POST /test/_doc/1
{
"id":1,
"name":"狮子"
}POST /test/_doc/2
{
"id":2,
"name":"虱子"
}#搜索:有点问题搜索拼音,把同音字也搜到了
GET /test/_search
{
"query": {
"match": {
"name": "shizi"
}
}
}#在创建的时候可以用拼音选择器,在搜索的时候不应该用拼音选择器,搜索用search_analyzer,在搜索是用户输入的是中文,用户用中文去搜,输入的是拼音,才拿拼音去搜
#自定义分词器 创建test索引库的时候指定字段使用自定义的分词
PUT /test
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer":{
"tokenizer":"ik_max_word",
"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": {
"name":{
"type": "text",
"analyzer": "my_analyzer",
"search_analyzer": "ik_smart"
}
}
}
}
#现在搜索是用户输入的是中文,用户用中文去搜,输入的是拼音,才拿拼音去搜
GET /test/_search
{
"query": {
"match": {
"name": "虱子"
}
}
}
#自动补全 参与自动补全的的字段必须是completion类型,字段的内容一般是用来补全的多个词条形成的数组
#创建索引库
PUT /test2
{
"mappings": {
"properties": {
"title":{
"type": "completion"
}
}
}
}#查询索引库
GET /test2#删除索引库
DELETE /test2#插入数据
POST test2/_doc
{
"title":["Sorry","WH-1000XM3"]
}POST test2/_doc
{
"title":["SK-IT","PITERA"]
}POST test2/_doc
{
"title":["Nintendo","switch"]
}#自动补全查询
GET /test2/_search
{
"suggest":{
"titleSuggest":{
"text":"s",
"completion":{
"field":"title",
"skip_duplicates":true,
"size":10
}
}
}
}GET /test2/_search
{
"suggest":{
"titleSuggest":{
"text":"so",
"completion":{
"field":"title",
"skip_duplicates":true,
"size":10
}
}
}
}#查看索引库的结构
GET /hotel/_mapping#删除索引库
DELETE /hotel#酒店数据索引库
#定义了两个分词器,全文检索用text_anlyzer,自动补全用completion_analyzer
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"
}
}
}
}#查询所有
GET /hotel/_search
{
"query":{
"match_all": {}
}
}#自动补全查询
GET /hotel/_search
{
"suggest":{
"suggestions":{
"text":"h",
"completion":{
"field":"suggestion",
"skip_duplicates":true,
"size":10
}
}
}
}
//自动补全查询:@Testvoid testSuggest() throws IOException {//准备requuestSearchRequest request=new SearchRequest("hotel");//准备DSLrequest.source().suggest(new SuggestBuilder().addSuggestion("suggestions",SuggestBuilders.completionSuggestion("suggestion").prefix("hz").skipDuplicates(true).size(10)));//发起请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);//解析结果System.out.println(response);Suggest suggest = response.getSuggest();//根据补全查询名称,获取补全结果CompletionSuggestion suggestions= suggest.getSuggestion("suggestions");//获取optionsList<CompletionSuggestion.Entry.Option> options = suggestions.getOptions();//遍历for (CompletionSuggestion.Entry.Option option:options){String text = option.getText().toString();System.out.println(text);}}




@Overridepublic List<String> getSuggestions(String prefix) {//准备requuestSearchRequest request=new SearchRequest("hotel");//准备DSLrequest.source().suggest(new SuggestBuilder().addSuggestion("suggestions",SuggestBuilders.completionSuggestion("suggestion").prefix(prefix).skipDuplicates(true).size(10)));try {//发起请求SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);//解析结果System.out.println(response);Suggest suggest = response.getSuggest();//根据补全查询名称,获取补全结果CompletionSuggestion suggestions= suggest.getSuggestion("suggestions");//获取optionsList<CompletionSuggestion.Entry.Option> options = suggestions.getOptions();//遍历List<String> list=new ArrayList<>(options.size());for (CompletionSuggestion.Entry.Option option:options){String text = option.getText().toString();System.out.println(text);list.add(text);}return list;} catch (IOException e) {throw new RuntimeException(e);}}

相关文章:
ES拼音分词自动补全实现
#测试拼音分词 POST /_analyze { "text":"如家酒店真不错", "analyzer": "pinyin" } #这里把拼音的首字母放到这里,也说明了这句话没有被分词,而是作为一个整体出现的 #还把每一个字都形成了一个拼音&#…...
golang 日志log与logrus
目录 一、Go 标准库 log 详解 1. 功能特点 2. 常用函数 3. 示例代码 4. 优势和局限 二、第三方库 logrus 详解 1. 功能特点 2. 核心功能 3. 示例代码 4. 优势和扩展性 三、总结 1. 何时选择 log? 2. 何时选择 logrus? 3. 对比总结 一、Go 标…...
EFISH-SBC-RK3576 + 5G模组:无线工业相机与分布式AI质检
在智能制造与仓储物流场景中,传统有线工业相机存在部署成本高、灵活性差等痛点。eFish-SBC-RK3576 通过 5G无线传输 分布式NPU协同,实现跨产线、跨工厂的AI质检系统,检测效率提升300%,布线复杂度降低90%。 1. 系统架构…...
C/C++ 基础 - 回调函数
目录 前言 回调函数预备知识 函数指针 什么是函数指针 函数指针的语法 如何用函数指针调用函数 函数指针作为函数的参数 函数指针作为函数返回类型 函数指针数组 回调函数 什么是回调函数 为什么要用回调函数 怎么使用回调函数 总结 前言 在写项目的时候&#x…...
【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的消息队列:使用 RabbitMQ 实现异步处
<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整…...
高项第十六章——项目采购管理
什么是采购管理?项目采购管理包括从项目团队外部采购或获取所需产品、服务或成果的各个过程。 项目采购管理包括编制和管理协议所需的管理和控制过程。 16_1 管理基础 什么是协议?协议是用于明确项目初步意向的任何文件或沟通结果,协议的范…...
宽带的带宽
宽带的带宽是指在一定时间内通过网络连接传输数据的能力,通常用**比特率(bit/s,即每秒传输的比特数)**来表示,比如100Mbps(兆比特每秒)。带宽越大,理论上网络传输数据的速度越快&…...
DeepSeek分析仿写选题应该怎么做?
目录 选题分析:AIGC在学术写作中的应用及其与作者背景的关系 1. 选题背景与意义 2. 研究问题 3. 研究方法 4. 主要发现 5. 研究贡献 6. 研究局限与未来方向 7. 结论 8. 未来研究方向 大家好这里是AIWritePaper官方账号,官网👉AIWrit…...
19840 Dijkstra求最短路2
19840 Dijkstra求最短路2 相较于1,数据增强了,要用堆来优化,也就是优先队列。 ⭐️难度:中等 🌟考点:Dijkstra、最短路问题 📖 📚 import java.util.*;public class Main {static…...
docker-compose部署prometheus+grafana+node_exporter
目录 docker-compose文件 配置文件 文件层级关系,docker-compose和配置文件位于同级目录 node_exporter页面json文件 涉及离线包 一.docker-compose文件 [rootsulibao prometheus]# cat docker-compose.yml version: 3services:prometheus:image: registry.c…...
Oracle数据库数据编程SQL<递归函数详解>
递归函数是一种在函数体内直接或间接调用自身的函数。这种函数通过将复杂问题分解为更小的相同问题来解决特定类型的编程任务。 目录 一、递归函数基本概念 1. 递归定义 2. 递归工作原理 二、递归函数示例 1. 经典阶乘函数 2. 斐波那契数列 3. 计算数字位数 三、递归查…...
Redis-08.Redis常用命令-有序集合操作命令
一.有序集合操作命令 ZADD key score 1 member1 [score2 member2]: zadd zset 10.0 a 10.5 b ZRANGE key start stop [WITHSCORES]: zrange zset 0 -1 为何顺序为a,c,b? 因为 zrange zset 0 -1 withscores zrange key start …...
LLaMA-Factory使用实战
LLaMA-Factory使用实战 项目介绍 项目地址:https://github.com/hiyouga/LLaMA-Factory 中文文档:安装 - LLaMA Factory 快速开始文档:https://zhuanlan.zhihu.com/p/695287607(推荐参考) 远程服务器通过本地代理加…...
读一本书,骑行万里路:与维乐 Angel Rise+骑行看世界
最近读到了一本名为《自行车改变的世界:女性骑行的历史》的书,才发现原来女性的骑行自由来得并不轻易,激励着每一位女性勇敢地踏上骑行之路。而我一直在使用的维乐坐垫品牌,除了产品专业之外,也一直都非常关注女性骑行…...
【大模型】SpringBoot整合LangChain4j实现RAG检索实战详解
目录 一、前言 二、LangChain4j 介绍 2.1 什么是LangChain4j 2.2 LangChain4j 主要特点 2.3 Langchain4j 核心组件 三、RAG介绍 3.1 什么是RAG 3.2 RAG工作流程 3.2.1 补充说明 3.3 Embedding模型 3.3.1 RAG实际使用步骤 3.3.2 什么是Embedding 3.3.3 Embedding 技…...
流动的梦境:GPT-4o 的自回归图像生成深度解析
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
北大人工智能研究院朱松纯:“中国的AI叙事” 存在认知偏差
3月29日,在2025中关村论坛通用人工智能论坛上,北京通用人工智能学院院长,北京大学人工智能研究院、智能学院院长朱松纯表示,目前,行业对AI的讨论几乎被大模型能力所占据,而基础学科、原始创新与智能本质的研…...
习题1.26
解释题,说简单也简单,难在如何表达清楚。 首先解释下代码的变化 (defn expmod[base exp m](cond ( exp 0) 1(even? exp) (mod (square (expmod base (/ exp 2) m)) m):else (mod (* base (expmod base (- exp 1) m)) m)))(defn expmod[base exp m](co…...
FPGA调试笔记
XILINX SSTL属性电平报错 错误如下: [DRC BIVRU-1] Bank IO standard Vref utilization: Bank 33 contains ports that use a reference voltage. In order to use such standards in a bank that is not configured to use INTERNAL_VREF, the banks VREF pin mu…...
基于Java(SSM)+Mysql实现移动大厅业务办理(增删改查)
基于 SSM 框架的移动业务大厅 数据库需要自行创建! 一、 整体基本实现情况 对本学期的 Java 作业 1 的 SOSO 移动大厅进行改进, 基于 SSM、JSP、Maven、Tomcat、MySQL 等实现。 二、 实现详情 1、 工程结构图 2、 工程结构各部分实现 (…...
音视频 ColorSpace色彩空间详解
前言 基于前篇介绍YUV格式,本文继续介绍另一个重要概念颜色空间,又叫色彩空间;主要用于在音视频开发中的色彩空间转换。 色彩空间Color Space 色彩空间由色彩模型和色域共同定义。当色彩模型与特定的描述相关联以后,就称为色彩空间。 色彩模型Color Model 色彩模型Col…...
【字符设备驱动开发–IMX6ULL】(一)简介
【字符设备驱动开发–IMX6ULL】(一)简介 一、Linux驱动与裸机开发区别 1.裸机驱动开发回顾 1、底层,跟寄存器打交道,有些MCU提供了库。 spi.c:主机驱动(换成任何一个设备之后只需要调用此文件里面的…...
45 55跳跃游戏解题记录
先是55跳跃游戏,暴力解法会怎样?会超出时间限制,而且有很多细节要注意: func canJump(nums []int) bool {// 处理空数组情况,当nums只剩一个元素时,nums[i:]导致越界。if len(nums) 0 {return false}// 如…...
C++_STL之list篇
一、list的介绍 std::list是C标准模板库(STL)中的一个双向链表容器。与vector和deque不同,list不支持随机访问,但它在任何位置插入和删除元素都非常高效。 1.基本特性 (1)双向链表结构:每个元素都包含指向前驱和后继的指针 (2)非连续存储&…...
Go中的逃逸分析
什么是逃逸? 逃逸是指一个变量本来应该分配在栈(stack)上,但由于某些原因,最终被分配到了堆(heap)上。 类比: 栈就像一个临时的快餐盒,用来存放短期使用的数据。堆就像…...
Spring 声明式事务 万字详解(通俗易懂)
目录 Δ前言 一、声明式事务快速入门 1.为什么需要声明式事务? 2.定义: 3.应用实例: 二、声明式事务的传播机制 1.引出问题: 2.传播机制分类: 3.应用实例: 三、声明式事务的隔离机制 1.四种隔离级别&…...
MySQL 当中的锁
MySQL 当中的锁 文章目录 MySQL 当中的锁MySQL 中有哪些主要类型的锁?请简要说明MySQL 的全局锁有什么用?MySQL 的表级锁有哪些?作用是什么?元数据锁(MetaData Lock,MDL)意向锁(Inte…...
fyrox 2D和3D游戏的制作
目录 fyrox介绍 1. 核心特性 1.1 高性能渲染 1.2 跨平台支持 1.3 物理引擎集成 1.4 脚本系统 1.5 场景管理 2. 架构设计 2.1 渲染器 2.2 资源管理器 2.3 输入系统 2.4 音频引擎 2.5 网络模块 3. 使用场景 3.1 2D游戏 3.2 3D游戏 3.3 模拟与教育应用 4. 在游戏…...
[Linux]基础IO
基础IO C文件IO相关操作磁盘文件与内存文件inode(index node)硬链接与软连接硬链接软连接总结 动静态库静态库动态库总结 C文件IO相关操作 当前路径:进程运行的时候,所处的路径叫做当前路径 打开文件的时候,一定是进…...
力扣刷题-热题100题-第27题(c++、python)
21. 合并两个有序链表 - 力扣(LeetCode)https://leetcode.cn/problems/merge-two-sorted-lists/description/?envTypestudy-plan-v2&envIdtop-100-liked 常规法 创建一个新链表,遍历list1与list2,将新链表指向list1与list2…...
