ElasticSearch中文检索学习总结

2023-11-13

0.先上教程

https://es.xiaoleilu.com/010_Intro/15_API.html         Es电子书30分钟入门。看完可以自己用c#或java写个框架了。

https://www.elastic.co/guide/cn/elasticsearch/guide/current/_retrieving_a_document.html          Es官网,这个随便看一看吧,主要是上面。

https://www.jianshu.com/p/07c4dddae43a          linux中 curl命令参数解释,需看懂这个才知道用。

1.http请求基础及常见错误

Es常用http请求:
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
VERB HTTP方法:GET, POST, PUT, HEAD, DELETE
PROTOCOL http或者https协议(只有在Elasticsearch前面有https代理的时候可用)
HOST Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost
PORT Elasticsearch HTTP服务所在的端口,默认为9200
PATH API路径(例如_count将返回集群中文档的数量),PATH可以包含多个组件,例如_cluster/stats或者_nodes/stats/jvm
QUERY_STRING 一些可选的查询请求参数,例如?pretty参数将使请求返回更加美观易读的JSON数据
BODY 一个JSON格式的请求主体(如果请求需要的话)

elaticsear no [query] registered for [filtered] 过滤查询错误
https://blog.csdn.net/zhongzunfa/article/details/81147906
es进行聚合操作时提示Fielddata is disabled on text fields by default 错误,用put解决
https://blog.csdn.net/u011403655/article/details/71107415
es自动生成的id长22个字符为uuid。

问题:
关于分词的大部分 Mapping 是无法修改的,即便能修改也是没有意义的;
因为修改前的数据并不会因为你的修改而生效,你必需重新覆盖写入才能生效,所以依旧推荐新建索引,然后使用 reindex 同步数据。

http://localhost:9200/_cat/indices?v   所有索引列表
http://localhost:9200/_cat/nodes?v    所有节点列表

2.常用

其实常用的在上面的Es电子书中有。这里主要记录ik分词器的使用,首先你的Es得装上ik分词器。有 ik_smart 和 ik_max_word两个。这里记录 ik_samrt 。

测试ik分词的效果

get 192.168.50.233:9200/_analyze?pretty
raw text
{
  "analyzer": "ik_smart",
  "text": "中华人民共和国国歌"
}

结果:分成了两个,自行测试 ik_max_word的效果。也可以测试 standard 标准分词器的效果。
{
    "tokens": [
        {
            "token": "中华人民共和国",
            "start_offset": 0,
            "end_offset": 7,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "国歌",
            "start_offset": 7,
            "end_offset": 9,
            "type": "CN_WORD",
            "position": 1
        }
    ]
}

ik分词主要用于中文搜索时可以很好的分词搜索,达到预期效果。

但所有的index/type/id中的属性字段默认使用standard分词器,ik分词器需要手动映射到对应的属性字段才能使用。(其它分词器也一样)

映射如下给testliuyan/person下的属性name映射ik分词器,前提是person对象不存在或name属性字段不存在,因为已存在的话,默认已使用了标准分词器,使用下面的http请求会报错。可以映射完之后,再添加数据,这时person数据对应name属性字段默认才使用ik分词器,但其他字段还是标准分词器。但映射之前又需索引存在

加个索引,但无数据

put 192.168.50.233/索引名称
put 192.168.50.233:9200/testliuyan/_mapping/person
{
    "properties": {
        "name": {
            "type":      "string",
            "analyzer":  "ik_smart"
        }
    }
}

结果: 
{
    "acknowledged": true
}
即代表映射成功。

添加一条数据来测试:

put 192.168.50.233:9200/testliuyan/person/2
{
"name":"123浙江中好国",
"oname":"123浙江中好国"
}

查询:

get 192.168.50.233:9200/testliuyan/person/_search
{
    "query" : {
        "match" : {
            "name" : "中国"
        }
    }
}

结果:
无,因为 ik分词器将 中国 看为一个整体。

把上面换成查字段 oname,该字段使用默认分词器。
则会查出刚刚我们加的那条数据,因为默认分词器将 中国 分为 中 和 国 , 数据只要包含这两个中一个即可。

其实还有一种方法可以配置Es全局属性,可以设置ik分词为默认配置,不用一个一个索引去设置了。

put http://192.168.50.233:9200/_template/rtf
{
  "template":   "*", 
  "mappings": {
    "_default_": {
      "_all": { 
        "enabled": true
      },
      "dynamic_templates": [
        {
          "strings": { 
            "match_mapping_type": "string",
            "mapping": {
              "type": "text",
              "analyzer":"ik_max_word",
              "ignore_above": 256,
              "fields": {
                "keyword": {
                  "type":  "keyword"
                }
              }
            }
          }
        }
      ]
    }
  }
}

get是查看配置

不过和上面的一样,新数据有效,旧数据由于已经映射了以前的默认分词。现在改配置也无法生效。

解决办法:

https://blog.csdn.net/aiyaya_/article/details/79567091   

https://blog.csdn.net/tclzsn7456/article/details/79958554

可以通过重建索引解决,不过这里只能一条一条索引去搞。

对于以前的大量索引我也是无能为力,希望有人告知如何解决?

 

3.索引删除用法

教程:https://www.cnblogs.com/Dev0ps/p/9493576.html

    1、#删除指定索引
    # curl -XDELETE -u elastic:changeme http://localhost:9200/acc-apply-2018.08.09
    {"acknowledged":true}
    2、#删除多个指定索引,中间用逗号隔开
    # curl -XDELETE -u elastic:changeme http://localhost:9200/acc-apply-2018.08.09,acc-apply-2018.08.10
    3、#模糊匹配删除
    # curl -XDELETE -u elastic:changeme http://localhost:9200/acc-apply-*
    {"acknowledged":true}
    4、#使用通配符,删除所有的索引
     curl -XDELETE http://localhost:9200/_all
     或 curl -XDELETE http://localhost:9200/*
    _all ,* 通配所有的索引
    通常不建议使用通配符,误删了后果就很严重了,所有的index都被删除了
    禁止通配符为了安全起见,可以在elasticsearch.yml配置文件中设置禁用_all和*通配符
    action.destructive_requires_name = true
    这样就不能使用_all和*了

 5、#获取当前索引
 # curl -u elastic:changeme 'localhost:9200/_cat/indices?v'

    6、如果存储不够可以设置定时删除,下面是保留3天的日志

30 2 * * * /usr/bin/curl -XDELETE -u elastic:changeme http://localhost:9200/*-$(date -d '-3days' +'%Y.%m.%d') >/dev/null 2>&1

以下是定时删除脚本:

1

2

3

#!/bin/bash

time=$(date -'-3days' +'%Y.%m.%d')

curl -XDELETE -u elastic:changeme http://localhost:9200/*-${time}

4.短语匹配用法

如果你的es实在是没有ik分词器这种东西,那就只好在搜索之前用第三方其他的分词接口分词了,然后再把结果使用es中的短语匹配,同样可以达到分词搜索的效果。

es中短语匹配的用法:

get  192.168.50.233:9200/nowuser3/newcomputer/_search
{
  "query": {
    "bool": {
      "should": [
                  { "match_phrase": { "name": "中国浙江" }},
                  { "match_phrase": { "name": "345"   }}
      ]
    }
  }
}

中国浙江 和 345 为第三方其他分词接口将原搜索字符串分好后返回的结果。

Es中匹配name包含中国浙江 或 name包含345的结果。

如果把should改成must,should代表or , must代表 and.
还有一种 must not 一看就懂。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ElasticSearch中文检索学习总结 的相关文章

  • pip安装pytorch 清华镜像

    每次要搭配环境的时候就头大 资源基本是国外 下载起来特别慢 有些连服务器都访问不了 不用镜像 按照书上或者网上的正常流程搭配环境 基本上都是以超时告终 然后就在网上疯狂找资源 网上有人说是个程序员都会翻墙 我可能是个假的程序员吧 什么都不会
  • Arthas watch命令使用

    目录 属性遍历深度 1 watch 类全限定名 方法名 遍历深度为1的入参 对象 返回信息 2 watch 类全限定名 方法名 x n 观察遍历深度为n的入参 对象 返回信息 观察事件点 1 watch 类全限定名 方法名 params x
  • Python爬虫从入门到精通:(39)增量式爬虫_Python涛哥

    概念 检测网络数据更新的情况 以便于爬取到最新更新出来的数据 实现核心 去重 实战中去重的方式 记录表 记录表需要记录什么 记录的一定是爬取过的相关信息 例如某电影网 爬取过的相关信息 每一部电影详情页的url 只需要使用某一组数据 该组数
  • 一个产品的商业目标应该从哪些方面制定?

    产品面向社区治理相关服务 比如信息发布 事件调解 活动发布 数据统计等等 但感觉缺少合理的商业策略和商务模式 文心一言 一个产品的商业目标应该从以下几个方面制定 市场定位 确定你的产品的目标客户是谁 这可以是你的社区治理服务所面向的人群 也
  • 【数学公式】Mathpix和MathType等等

    MathML MathML指 数学标记语言 是XML语言的一个子集 用来在web网页 甚至部分软件中显示数学公式 简言之 就是使用特殊的类似HTML的标记在网页中显示数学公式 MathType公式编辑器 MathType是一个强大的数学公式
  • JSP的原理

    Tomcat的lib目录下的jasper jar包 这个包里面有一个HttpJspBase类 这个类我们看一下源码 Source code recreated from a class file by IntelliJ IDEA power
  • CC++ 标头和源文件:它们如何工作?

    本文将向您展示将程序划分为C中的组件部分或正确使用标头和源文件C 诀窍 介绍 我主要是为我的一个朋友写这篇文章的 但是 如果我不与大家分享这一点 我会对社区造成伤害 所以就在这里 我们将探索标头和源文件以及它们的作用 这些代码的大部分在 C
  • SSH框架简介篇

    文章目录 概述 目录结构 struts Spring Hibernate 总结 概述 SSH框架 Struts Spring Hibernate 是一种广泛应用的Java企业级开发框架组合 它将Struts Spring和Hibernate
  • LVM原理及配置

    1 简介 1 1 什么是LVM LVM是 Logical Volume Manager 逻辑卷管理 的简写 它由Heinz Mauelshagen在Linux 2 4内核上实现 目前最新版本为 稳定版1 0 5 开发版 1 1 0 rc2
  • 中国天气网接口

    中国天气weather com http m weather com cn data 101110101 html 六天预报 http www weather com cn data sk 101110101 html 实时天气信息 其中1
  • RSA pkcs1与pkcs8 java获取私钥

    RSA pkcs1与pkcs8 java获取私钥 目录 RSA pkcs1与pkcs8 java获取私钥 获取秘钥 获取pkcs1 格式秘钥 获取pkcs8格式秘钥 读取秘钥信息 解密 获取秘钥 maven依赖
  • 【网络】几种常见的协议

    几种常见的协议 DNS Domain Name System 域名解析协议 端口号 53 通过域名解析获得域名所对应的IP FTP File Transfer Protocol 文件传输协议 端口号 21 用户可通过客户机程序向远程主机上传
  • el-input正则限制

    el input限制只能输入1 9且只保留一位小数 return rules deductionPrice required true message 请输入折扣力度 trigger blur validator this valuePri
  • 栈溢出学习

    前言 跟着ctfwiki学习 所有题目都在ctfwiki上可以找到 加油加油 栈溢出原理 栈溢出指的是程序向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数 因而导致与其相邻的栈中的变量的值被改变 看一个简单的程序 include
  • 【枚举的定义;枚举变量的定义、初始化和赋值】(学习笔记16--枚举)

    目录 枚举的定义 枚举变量的定义 枚举变量的初始化与赋值 使用枚举类型 可以提高程序代码的健壮性和可读性 并且枚举成员属于常量 甚至可以使用枚举成员名作为维的大小 来进行数组的定义 枚举的定义 定义枚举的格式为 enum 枚举名 枚举成员1
  • Muduo网络库核心梳理

    Muduo网络库 Muduo网络库本身并不复杂 是一个新手入门C 面向对象网络编程的经典实战项目 但是 新手在刚刚上手读代码的时候 非常容易陷入代码的汪洋大海 迷失方向 本文旨在简要梳理Muduo网络库的核心内容 帮助初学者快速上手源码阅读
  • DES算法简单介绍及用法

    大家好 今天给大家分享一下DES加密 一 DES介绍 加密一般分为可逆加密和不可逆加密 其中可逆加密一般又分为对称加密和非对称加密 前者是我们使用公用密钥加密之后可以使用公用密钥再解密出来 而后者则是使用公用密钥加密之后必须使用私用密钥来解
  • MySQL这一章就够了(一)

    前言 呕心沥血5个月淦出本文 整理所有MySQL知识 我愿称之为地表最强MySQL MySql笔记 MySQL是关系型数据库 基于SQL查询的开源跨平台数据库管理系统 它最初是由瑞典MySQL AB公司开发的 现在它是Oracle Corp
  • 手把手教你区块链java开发智能合约nft(第四篇)-如何动态获取gasPrice和gasLimit?

    手把手教你区块链java开发智能合约nft 第三篇 如何动态获取gasPrice和gasLimit 初学区块链 那真叫一个痛苦并无助 如果没有人带你的话 今天写的这篇是在前面文章基础上写的 初学区块链的朋友建议先看我前面写的文章 手把手教你
  • 【雕爷学编程】Arduino动手做(72)---HX711 人体称重模块

    37款传感器与执行器的提法 在网络上广泛流传 其实Arduino能够兼容的传感器模块肯定是不止这37种的 鉴于本人手头积累了一些传感器和执行器模块 依照实践出真知 一定要动手做 的理念 以学习和交流为目的 这里准备逐一动手尝试系列实验 不管

随机推荐

  • win32读取注册表

    直接代码 bool bIsIE6 false HKEY hKey NULL DWORD dwType DWORD dwSize LONG lReg RegOpenKey HKEY CLASSES ROOT HTTP shell open c
  • 技术方案设计没有深度?试试这套方法论

    原文为阿里技术发布的一篇文章 作者 高福来 不拔 读后受益匪浅 决定转载分享 平时听到一些同学说技术方案没什么深度 很难讲出来 怎么去体现技术方案设计的深度是大家普遍关心的一个问题 这个问题不是个例问题 因此分享下自己的一些观点和看法 主要
  • ps怎么对比原图快捷键_Photoshop最常用的10个快捷键,让你修图事半功倍!

    小伙伴们 小编今天要给大家发一波福利 揭秘Photoshop最常用的10个快捷键 让你修图事半功倍 1 Ctrl Ctrl 放大 缩小图层 使用Photoshop进行修图时 为了更加准确地进行精修 我们需要放大图片 此时使用快捷键 Ctrl
  • STM32F4-正点原子探索者-SYSTEM文件夹下的delay.c文件内延时函数详解

    目录 笔记 首先是对应的头文件delay h中的函数 1 delay init u8 SYSCLK 此处将把关于UCOS相关代码忽略 后面学习 注 以下为SysTick结构体详解 与主体函数只是有一定联系 可略过 SysTick结构体中的C
  • 散点矩阵

    import pandas as pd import matplotlib pyplot as plt import seaborn as sns crime pd read csv crimeRatesByState2005 csv cr
  • 【Unity3D】Unity3D游戏里实现复制粘贴功能

    public class sTest MonoBehaviour public InputField input public Button btn if UNITY IOS DllImport Internal private stati
  • ffmpeg开发环境的安装测试和更新的步骤

    本文将介绍ffmpeg开发环境的安装测试和更新的步骤 基于ubuntu16 04和ffmpeg3 2 1 安装x264 1 libx264需要yasm sudo apt get install yasm 但是yasm版本比较旧 所以安装na
  • 做个成功的管理者

    什么是 管理 大家对这词都不陌生 但什么才是真正的管理呢 管理的真谛在 理 不在 管 管理者的主要职责就是建立一个合理的游戏规则 让每个员工按照游戏规则自我管理 游戏规则要兼顾公司的利益和个人的利益 并且把公司的利益和个人的利益统一起来 尽
  • SQL语法基础

    结构化查询语言 Structured Query Language 是一种特殊目的的编程语言 是一种数据库查询和程序设计语言 用于存取数据以及查询 更新和管理关系数据库系统 数据查询语言 DQL SELECT 查询 数据操作语言 DML I
  • Flink实时任务性能调优

    前言 通常我们在开发完Flink任务提交运行后 需要对任务的参数进行一些调整 通常需要调整的情况是任务消费速度跟不上数据写入速度 从而导致实时任务出现反压 内存GC频繁 FullGC 频繁 内存溢出导致TaskManager被Kill 今天
  • 【Git】(六)子模块跟随主仓库切换分支

    场景 主仓库 TestGit 子模块 SubModule 分支v1 0 gitmodules文件 submodule Library SubModule path Library SubModule url git gitee com su
  • 内置变量列表(Unix)

    当前页可打印的行数 属于Perl格式系统的一部分 根据上下文内容返回错误号或者错误串 列表分隔符 打印数字时默认的数字输出格式 Perl解释器的进程ID 当前输出通道的当前页号 与上个格式匹配的字符串 当前进程的组ID 当前进程的有效组ID
  • 【JS逆向】之JS函数的闭包导出调用

    前言 闭包其实就是一个函数里面的私有方法 我们在函数外部无法调用 这个就叫闭包 理解起来其实也不难 这个其实也跟js的作用域有很大关系的 这里的闭包也用了作用域的特性 js的作用域分两种 全局和局部 基于我们所熟悉的作用域的知识 我们知道在
  • org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter

    大部分愿意是因为导入的包的版本问题 我是把jackson的包换成了高版本的就没有报错了
  • 【golang设计模式】Golang设计模式详解二

    六 工厂方法模式 工厂方法模式使用子类的方式延迟生成对象到子类中实现 Go中不存在继承 所以使用匿名组合来实现 代码如下 factorymethod go package factorymethod Operator 是被封装的实际类接口
  • [546]python实现K-Nearest Neighbor算法

    K Nearest Neighbor KNN 可以翻译为K最近邻算法 是机器学习中最简单的分类算法 为了更好的理解这个算法 本帖使用Python实现这个K Nearest Neighbor算法 最后和scikit learn中的k Near
  • 微信无法定位 请打开定位服务器,微信定位是灰色的点不开是怎么回事?该怎么解决问题呢?...

    你知道什么是微信定位吗 你知道微信定位是灰色的点不开是怎么回事 该怎么解决问题呢 最近很多微信用户问我微信定位是灰色的点不开是怎么回事 该怎么解决问题呢 下面小编就带你了解一下微信定位是灰色的点不开是怎么回事 该怎么解决问题呢 小伙伴们如果
  • C++11之线程库(Thread、Mutex、atomic、lock_guard、同步)

    目录 线程库C 11 线程Thread 头文件 常用的成员函数 创建线程的方式 多线程的冲突问题 互斥体Mutex 头文件 常用的成员函数 实例 原子操作Atomic 头文件 实例 自动加解锁lock guard 实例 同步 同步方式 实例
  • 设计模式-原型模式

    一 原型模式 定义 用原型实例指定创建对象的种类 并且通过拷贝这些原型创建新的对象 原型模型其实是从一个对象再创建另外一个可定制的对象 而且不需要知道任何创建的细节 类型 创建型类型 优点和使用场景 1 使用原型模型创建对象比直接new一个
  • ElasticSearch中文检索学习总结

    0 先上教程 https es xiaoleilu com 010 Intro 15 API html Es电子书30分钟入门 看完可以自己用c 或java写个框架了 https www elastic co guide cn elasti