【Elasticsearch】全文搜索

news/2024/9/23 2:27:24/

全文搜索是ES的关键特性之一,平时我们使用SQL的like语句,搜索一些文本、字符串是否包含指定的关键词,但是如果两篇文章,都包含我们的关键词,具体那篇文章内容的相关度更高? 这个SQL的like语句是做不到的,更别说like语句的性能问题了。

ES通过分词处理、相关度计算可以解决这个问题,ES内置了一些相关度算法,大体上思想就是,如果一个关键词在一篇文章出现的频率高,并且在其他文章中出现的少,那说明这个关键词与这篇文章的相关度很高。

分词的目的:

主要就是为了提取搜索关键词,理解搜索的意图,我们平时在百度搜索内容的时候,输入的内容可能很长,但不是每个字都对搜索有帮助,所以通过分词算法,我们输入的搜索关键词,会进一步分解成多个关键词,例如:搜索输入 “上海陆家嘴在哪里?”,分词算法可能分解出:“上海、陆家嘴、哪里”,具体会分解出什么关键词,跟具体的分词算法有关。

默认情况下,使用全文搜索很简单,只要将字段类型定义为text类型,然后用match语句匹配即可。

ES对于text类型的字段,在插入数据的时候,会进行分词处理,然后根据分词的结果索引文档,当我们搜索text类型字段的时候,也会先对搜索关键词进行分词处理、然后根据分词的结果去搜索。

ES默认的分词器是standard,对英文比较友好,
例如:hello world 会被分解成 hello和world两个关键词,如果是中文会分解成一个一个字,例如:上海大学 会分解成: 上、海、大、学。

在ES中,我们可以通过下面方式测试分词效果:

语法:

GET /_analyze
{"text": "需要分词的内容","analyzer": "分词器"
}

例如:

GET /_analyze
{"text": "hello wolrd","analyzer": "standard"
}

使用standard分词器,对hello world进行分词,下面是输出结果:

{"tokens" : [{"token" : "hello","start_offset" : 0,"end_offset" : 5,"type" : "<ALPHANUM>","position" : 0},{"token" : "wolrd","start_offset" : 6,"end_offset" : 11,"type" : "<ALPHANUM>","position" : 1}]
}

token就是分解出来的关键词。

下面是对中文分词的结果:

GET /_analyze
{"text": "上海大学","analyzer": "standard"
}

输出

{"tokens" : [{"token" : "上","start_offset" : 0,"end_offset" : 1,"type" : "<IDEOGRAPHIC>","position" : 0},{"token" : "海","start_offset" : 1,"end_offset" : 2,"type" : "<IDEOGRAPHIC>","position" : 1},{"token" : "大","start_offset" : 2,"end_offset" : 3,"type" : "<IDEOGRAPHIC>","position" : 2},{"token" : "学","start_offset" : 3,"end_offset" : 4,"type" : "<IDEOGRAPHIC>","position" : 3}]
}

明显被切割成一个个的字了。

中文关键词被分解成一个个的字的主要问题就是搜索结果可能不太准确。

例如:

搜索:上海大学

分词结果:上、海、大、学

下面的内容都会被搜到:

上海大学
海上有条船
上海有好吃的
这条船又大又好看
基本上包含这四个字的内容都会被搜到,区别就是相关度的问题,这里除了第一条是相关的,后面的内容基本上跟搜索目的没什么关系。


http://www.ppmy.cn/news/481958.html

相关文章

关于word转pdf功能实现

关于word转pdf功能实现 1 Spire1 添加依赖2 测试 2 poi1 添加依赖2 测试 3 总结 遇到word转pdf相关的问题,记录一下相关的使用 1 Spire spire.doc是一款国产的,专业的 Java Word 组件,使用它可以轻松地将 Word 文档创建、读取、编辑、转换和打印等功能集成到自己的 Java 应用程…

Filco minila air 与windows10蓝牙连接问题

1、在连接的时候&#xff0c;系统会提示输入PIN码&#xff0c;此时蓝牙键盘并未连接&#xff0c;所以需要使用原键盘输入【123456】 2、马上使用鼠标点击【连接】 3、以迅雷不及掩耳盗铃之势在filco上输入【123456】&#xff0c;回车&#xff01; OK了&#xff01;

Filco圣手二代键盘蓝牙连接方法

键盘前面的电源按钮按进去&#xff08;即打开电源开关&#xff09;。同时按下CtrlAltFn&#xff0c;看到蓝灯和红灯同时亮起&#xff0c;之后剩蓝灯闪烁。按下小键盘中数字键1-4中的一个&#xff08;一共可以连4台设备&#xff09; &#xff08;如果你选的数字之前连接过其他设…

Filco win10 蓝牙问题

Filco蓝牙键盘初始化后&#xff0c;win10的蓝牙还是显示Filco键盘的信息&#xff0c;导致键盘不能正常连接。 原因&#xff1a;win10系统的锅&#xff0c;无法完全删除干净已经连接的设备的信息。&#xff08;吐槽&#xff1a;搞了两个小时&#xff0c;键盘电脑瞎折腾&#xf…

filco的pin码_Filco圣手二代双模蓝牙机械键盘连接方法

配置cas 在给tomcat配置好证书的基础上做一下操作(可以根据上一篇博客进行配置) 1.cas服务端配置(最后更改一下服务器tomcat的端口号) 第一步:下载cas-server-3.4.2.1-relea ... Java基本运算符 1.算术运算符 作用是数字的计算,包括:正号,负号-,乘*,除/,余%,加,减-,其算法与数学…

[Filco]蓝牙连接键盘

第一次用蓝牙键盘&#xff0c;断连后的重连太痛苦了。蓝牙里搜不到键盘&#xff0c;搜到了PIN码不知道输入什么。 不输入PIN码连接 Filco方法&#xff1a; 控制面板 → 设备和打印机 → 点击“添加设备”&#xff0c; 搜索到 Filco&#xff1b;点击下一步 → 尝试从设备输入 →…

filco蓝牙不好用_FilcoMinilaAir蓝牙机械键盘使用感受,做工精细手感优良但并不完美...

目前在 60% 尺寸键盘领域&#xff0c;高端产品选择不多&#xff0c;除了这款 Filco Minila&#xff0c;还有就是 HHKB。它们都来自日本&#xff0c;提供蓝牙版本&#xff0c;价格都在千元以上。HHKB 是静电容键盘&#xff0c;相对于采用 Cherry 轴的机械键盘&#xff0c;手感更…

filco使用一天

昨天换了青轴filco,虽然也考虑过hhk,但反正都是不可编程的,底盘也都是cherry, 那就不如买个便宜的了 120刀,尚可接受的价格. 但是噪音真心大, 直逼打字机的噪音,如果一个人用或许还好, 但放在公共场合我都不好意思快速敲键盘了 下面详细说说 1, 外观 很厚,很沉,想带着他出差…