搜索。。。

article/2025/10/24 3:03:48

1、mysql的like具有局限性

# 体现在功能不全,性能低。不适用于全文搜索(日志或简历中搜索字段)、没有相关性搜索排名等等
select name from goods WHERE name LIKE "%苹果%"

2、试试elasticsearch 搜索

1、解决mysql like 的短板
2、它是分布式的

在这里插入图片描述

1)安装es和kibana

1、通过kibana 操作 es
2、通过docker安装elasticsearch,kibana
kibana安装时候的命令中 kibana的版本号要和es一致
3、安装好后就可以通过ip:port 访问 kibana

2) es 基本概念

在这里插入图片描述

1、7.x以后index 开始理解为table, type这个概念马上取消掉了,不管他就行了
2、schema 就是比如定义列的最大长度是什么类型,es里面叫它映射 mapping
3、索引一个数据就是mysql中的insert一个数据,把数据放进索引,就是mysql里的放进table
所以,索引有两个含义:动词(insert),名词(table)
4、操作起来就是resfulAPI,http的,1)添加数据用PUT 或者 POST (需要自己指定id,POST会自动生成id,PUT同样一条命令是更新,而POST同样一条命令,会再增加一行数据)2)获取数据GET 获取某一个数据 GET user/_source/13)搜索数据GET _search?q=xiaomingGET user/_search?q=xiaoming4) 通过request body查询index中所有GET user/_search{"query":{"match_all":{}}5)注意update数据用这种方式,POST user/_update/1{"doc":{"age":18}}不这样写容易覆盖6) DELETE /usr/_doc/2 # 删除一条#删除indexDELETE user7)批量操作数据(bulk), 批量获取(mget)

3)es全文查询

# 对于es来说 from和 size分页在数据量比较小的情况下可行,太大的话要用scroll
GET user/_search
{"query":{"match_all":{}},"from":4,"size":4
}query里面的查用到 
复合查询,全文查询,术语查询
比如:搜住址里面的街道,注意大小写不敏感
模糊查询/匹配查询 match
match_phrase 精确查询 / 短语查询
1、我要搜Madison stree,结果必须两个分词都有,而且按顺序连着的
multi_match 查询
比如搜resume的时候,希望搜出来go语言的,但是不希望它出现want_learn那栏里的
这样搜索的时候指定title 和 desc里面出现的go语言
"multi_match":{"query":"go","fields":["title^2","desc"]}title^2 代表title里面查询出来的go权重高
query_string
"query_string":{"default_field":"address","query":"Madison OR street"
}
OR可以换成AND

4)term查询

1、term是不会分词的
小写+分词就是analyzer
存入倒排索引的时候会把大写全部改成小写,所以这时候term查Street就查不到
查street有
那为什么match能搜到呢?因为它在查询数据的时候也是和写入数据同样,
先分词,然后变成小写
2、term是原子查询,就是你写的是什么,它就搜什么
也正因此,如果你搜全是小写"madison street"还是搜不到,因为在倒排索引里
都已经分词了,没有原装的这两词
2> range查询
"range":{"age":{"gte":10,  #大于等于  没有e就是没有等于"lte":20,  #小于等于"boost":2.0 # 权重}
}
3> exists查询
# 查询出所有有age的数据
"exists":{"field":"age"
}
4> fuzzy 模糊查询

就是你搜golanl 搜索引擎也能知道你要搜 golang

"fuzzy":{"address":"streat"
}
依旧能搜索出来street,因为street和streat的编辑距离是1,很短

match也能做模糊查询

"match":{"address":{"query":"Midison","fuzziness":1 # 1表示开启模糊查询}
}
而直接用fuzzy不会进行分词

5)复合查询

就是用bool将其他查询语言拼凑起来
must表示里面的查询语句必须满足,和filter差不多,但是满足后会加分
should是满足与否无所谓,和不写的区别就是满足的话得分会高一些
must_not
filter 过滤,必须匹配

6)倒排索引

在这里插入图片描述

1、es底层存储数据使用的是倒排索引
2、英文的分词很简单,就是通过空格,并且都改成小写,防止后面搜索不到
3、6(1,0)分别代表 671出现在6号文档,出现过一次,在第0位
4、查询的时候,比如查Madison street,如果两个分词都符合得分最高,只符合一个的也会搜出来
5、写入和查询数据的时候都会分词

7)es Analyzer

1、写入数据----> es --analyzer–> 倒排索引
写入和搜索的时候都可以指定analyzer,search_analyzer
2、analyzer就是分词+大写变小写
在这里插入图片描述
3、搜索策略
如果写入和查询的时候你指明了analyzer,它们是互不影响的,否则按下图走
在这里插入图片描述

8)中文分词

1、词典匹配,比如词典里有没有中华牙膏,
2、基于统计
3、基于深度学习
在这里插入图片描述
4、用 IK 分词器
IK要和es的版本对应起来
直接将IK 放到es的外部挂载目录plugins里就行了

分词器之前就要设置好,否则后面不好改,因为之前的都是用原来的分词器分的,这部分数据怎么办?

5、扩展词库
将自己的专有名词加到词库中
在ik/config/ 下建自己的文件夹,里面建自己的mydic.dic 里面填入词汇,在 extra_stopword.dic中加入停用词
进入config vim IKAnalyzer.cfg.xml 将自己的加进去,使其生效
docker restart 容器id


http://chatgpt.dhexx.cn/article/vMSQu80B.shtml

相关文章

人工智能——图搜索

一.数据驱动和目标驱动搜索 以下情况建议使用目标驱动搜索: (1)目标或假设是在问题陈述中给出的。例如定理的证明,目标就是定理。 (2)与问题数据匹配的规则非常多,会产生大量分支…

人工智能搜索策略:A*算法

人工智能搜索策略:A*算法 目录 人工智能搜索策略:A*算法A算法1.全局择优搜索2.局部择优搜索 A*算法1. A*算法的可纳性2. A*算法的最优性3. h(n)的单调限制A* 算法应用举例对A*算法的一点思考熟练掌握A*算法的性质A*算法的性质A*算法的最优性h(n)的单调限…

智能搜索框

html部分 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, i…

Artificial Intelligence 人工智能 AI search AI 搜索

文章目录 前言一、Uninformed Search (无信息搜索&#xff09;二、Data structure for search tree三、Breadth-first search (广度优先搜索)1. Pseudocode for a BFS 四、Depth-first search (深度优先搜索)1. Pseudocode for a DFS 五、Measuring performance六、BFS和DFS时间…

搜索技术——群智能

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;瞳孔空间 一&#xff1a;初识群智能 1.1&#xff1a;粒子群算法 粒子群算法&#xff0c;也称粒子群优化算法或鸟群觅食算法&#xff08;Particle Swarm Optimization&#xff09;&#xff0c;缩写…

人工智能之搜索算法

通过搜索来解决问题 文章目录 通过搜索来解决问题1. 什么是算法?2. 什么是搜索?3. 搜索算法3.1 如何做路径规划?3.2 搜索过程3.3 通用搜索算法3.4 盲目的搜索算法3.4.1 深度优先遍历(Deep First Search)3.4.2 广度优先遍历(BFS)3.4.3 Dijkstra 算法3.5 启发式搜索算法(有信息…

人工智能:搜索策略

一、无信息的搜索策略 1.宽度优先搜索 2.一致代价搜索 当每一步的行动代价都相等时宽度优先搜索是最优的,因为它总是先扩展深度最浅的未扩展结点。 一致代价搜索( uniform-cost search)扩展的是路径消耗(gn)最小的结点n。这可以通过将边缘结点集组织成按g值排序的队列来实现…

人工智能中的搜索

最近在mooc学习人工智能&#xff1a;模型于算法&#xff0c;下面记录课上的例子和学到的东西。 首先&#xff0c;人工智能搜索是从海量的信息源中通过约束条件和额外信息运用算法找到问题所对应的答案。 正所谓&#xff0c;你见&#xff0c;或者不见我&#xff0c;我就在那里不…

人工智能——搜索技术

转载&#xff1a;https://blog.csdn.net/Sun7_She/article/details/40344329 AI-3的80~84不懂 A*算法不懂 引言&#xff1a; 什么是搜索&#xff1a; 根据问题的实际情况不断寻找可利用的知识&#xff0c;构造出一条代价较少的推理路线&#xff0c;使问题得到圆满的解决的过程称…

新一代智能搜索引擎,让搜索一击即中

什么是搜索&#xff1f; 搜索引擎的英文为search engine。 搜索引擎是一个对互联网信息资源进行搜索整理和分类&#xff0c;并储存在专属网络数据库中供用户查询的系统&#xff0c;包括信息搜集、信息分类、用户查询三部分。 从使用者的角度看&#xff0c;搜索引擎提供一个包含…

浅谈人工智能搜索技术论文

摘要&#xff1a;本文简单阐述了人工智能中的智能搜索技术的概念以及启发式搜索算法&#xff0c;介绍了几种启发式搜索函数的选择及其研究中遇到的难题&#xff0c;并从中求解来探讨解决问题的思路。 关键词&#xff1a;智能搜索&#xff1b;状态空间&#xff1b;与/或树&…

Python搭建代理IP池(三)- 检测 IP

在获取 IP 时&#xff0c;已经成功将各个网站的代理 IP 获取下来了&#xff0c;然后就需要一个检测模块来对所有的代理进行一轮轮的检测&#xff0c;检测可用就设置为满分&#xff0c;不可用分数就减 1&#xff0c;这样就可以实时改变每个代理的可用情况&#xff0c;在获取有效…

ProxyPool 爬虫代理IP池(分享)

GitHub - jhao104/proxy_pool: Python爬虫代理IP池(proxy pool)https://github.com/jhao104/proxy_pool/ProxyPool 爬虫代理IP池项目,主要功能为定时采集网上发布的免费代理验证入库&#xff0c;定时验证入库的代理保证代理的可用性&#xff0c;提供API和CLI两种使用方式。同时…

python爬虫设置代理ip池【源代码】(存入数据库)

python爬虫设置代理ip池【源代码】 在爬取各大网站时&#xff0c;经常遇到一些由于访问次数过多或者访问频率过高&#xff0c;而导致你的ip被“封”。所以我们运用 代理ip池 来解决这个由于访问频率过高而终止爬取进行。 下面介绍一下免费获取代理ip池的方法&#xff1a; 一…

python3之爬虫代理IP的使用+建立代理IP池

爬虫代理IP的使用建立代理IP池 代理IP的使用建立代理IP池完整代码 代理IP的使用 先了解一下百度百科定义的IP 为什么要使用代理IP? 反爬(反网络爬虫) 示例: 测试网址 http://httpbin.org/get 用浏览器先访问测试网址下看看 再用我们写的代码简单请求一下网页看看 impo…

教你创建一个免费的代理IP池(txt存储版本)

教你创建一个免费的代理IP池&#xff08;txt存储版本&#xff09; 很多人可能会为爬虫被ban&#xff0c;IP被封等反爬机制苦恼&#xff0c;接下来我就教给大家如何白嫖做一个代理IP池。 准备工作 首先是准备工作&#xff0c;因为是第一个版本&#xff0c;因此我打算先用txt存…

什么是代理IP池,如何构建?

什么是代理ip池&#xff1f; 通俗地比喻一下&#xff0c;它就是一个池子&#xff0c;里面装了很多代理ip。它有如下的行为特征&#xff1a; 1.池子里的ip是有生命周期的&#xff0c;它们将被定期验证&#xff0c;其中失效的将被从池子里面剔除。 2.池子里的ip是有补充渠道的&…

Python爬虫——怎么搭建和维护一个本地IP池

目录 背景 一、什么是本地代理IP池 二、代理IP池功能架构图 三、各个组件功能说明及示例代码 1. IP池管理器 2. 代理IP获取器 3. IP质量检测器 4、数据存储器 5、API接口层 6、应用程序 总结 背景 在我们进行爬虫工作时&#xff0c;经常需要使用代理IP。大多数代理…

搭建代理IP池的方法

突破次数的限制就可以使爬虫更高效的工作,代理IP是突破次数限制,提高爬虫高效工作的最好的工具。所以,很多人都想通过建立IP池的方法,实现换IP突破限制,那么这IP池如何进行搭建呢? 一,免费搭建代理IP池的方法 1.主要用途 当进行数据爬取的时候,有一部分网站是设置了一些…

scrapy中添加ip池的方法

scrapy中添加ip池的方法 我使用的是scrapy2.2 setting 中写下ip池 IPPOOL [{ipaddr:221.230.72.165:80}, {ipaddr:175.154.50.162:8118}, {ipaddr:111.155.116.212:8123},]在在中间件midllewares添加代码 from mypython.settings import IPPOOLfrom scrapy import signals …