全文搜索是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}]
}

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

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

例如:

搜索:上海大学

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

下面的内容都会被搜到:

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

【Elasticsearch】全文搜索相关推荐

  1. Spring和Elasticsearch全文搜索整合详解

    Spring和Elasticsearch全文搜索整合详解 一.概述 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web ...

  2. ElasticSearch 全文搜索

    ElasticSearch 全文搜索 对文档执行全文检索,包括单个或多个单词或词组查询,返回匹配条件的搜索结果. ElasticSearch 是基于Apache Lucene的搜索引擎,一个开源.免费 ...

  3. elasticsearch全文搜索

    全文搜索 全文搜索两个最重要的方面是: 相关性(Relevance) 它是评价查询与其结果间的相关程度,并根据这种相关程度对结果排名的一种能力,这种计算方式可以是 TF/IDF 方法.地理位置邻近.模 ...

  4. [Elasticsearch] 全文搜索 (一) - 基础概念和match查询

    全文搜索(Full Text Search) 现在我们已经讨论了搜索结构化数据的一些简单用例,是时候开始探索全文搜索了 - 如何在全文字段中搜索来找到最相关的文档. 对于全文搜索而言,最重要的两个方面 ...

  5. SpringBoot ElasticSearch 全文搜索

    2019独角兽企业重金招聘Python工程师标准>>> 一.pom.xml配置 SpringBoot版本1.5.6https://blog.csdn.net/kingice1014/ ...

  6. SpringBoot 集成 ElasticSearch 全文搜索(步骤非常的详细)

    目录 一.pom.xml配置 二.项目代码集成示例 Yml配置 存储映射实体 @Document注解 @Field注解 创建Repository 三.安装ES 下载安装ES 测试默认分词 四.Ik分词 ...

  7. 帝国CMS7.5基于es(Elasticsearch)7.x的全文搜索插件

    帝国CMS7.5基于es(Elasticsearch)7.x的全文搜索插件 - GXECMS博客 一.插件演示地址 后台演示地址:https://ecms.gxecms.cf/e/admin/inde ...

  8. php中文搜索工具,Laravel 下 TNTSearch+jieba-PHP 实现中文全文搜索

    TNTSearch+jieba-php这套组合可以在不依赖第三方的情况下实现中文全文搜索: 特别的适合博客这种小项目: 开启php扩展 pdo_sqlite sqlite3 mbstring 开始: ...

  9. python elasticsearch 入门教程(二) ---全文搜索

    python elasticsearch 入门教程(二) ---全文搜索 截止目前的搜索相对都很简单:单个姓名,通过年龄过滤.现在尝试下稍微高级点儿的全文搜索--一项 传统数据库确实很难搞定的任务. ...

  10. 全文搜索!收藏这篇Solr ElasticSearch 长文就可以搞定

    转载自  全文搜索!收藏这篇Solr ElasticSearch 长文就可以搞定 摘自:JaJian`博кē Java后端技术编者说:文章从浅到深,描述了什么是全文搜索,为什么要使用全文搜索,Solr ...

最新文章

  1. Fedora 17 下安装codeblocks
  2. linux中 probe函数的何时调用的?
  3. C++中的赋值操作符重载
  4. 机器学习算法精讲20篇(一)-k-means聚类算法应用案例(附示例代码)
  5. linux 以某个用户执行,Linux root用户肿么以制定的用户去执行某个程序。
  6. java两种异常_JAVA两种异常的区别 (转)
  7. Alibaba 应用诊断利器 Arthas 3.0.5 版本发布:提升全平台用户体验
  8. ob和mysql兼容吗_OceanBase SQL简介
  9. linux 按照特定字符换行_在Linus Torvalds建议之后内核淘汰80个字符长度限制
  10. 规则执行管理平台中远程和服务管理的学习1
  11. bootstrap中日历组件只显示年月
  12. linux vsftpd
  13. .NET Reflector + ILSpy 反编译过程
  14. Md5加密工具类DigestUtils
  15. 使用freemarker循环图片(附demo)
  16. 解决OneNote同步失败的问题
  17. span标签的间距问题
  18. Let X be a finite set f : X → X a function. Prove that f is injective if and only if f is surjective
  19. alibaba人一起写过的技术丛书
  20. 【数学建模】高等数学知识点汇总

热门文章

  1. node.js htttp文件服务器 遇到目录时搜索目录内默认html页面 廖雪峰javascript教程node.js中http部分练习题
  2. 华为在印度市场再受挫折,跌出智能手机市场份额前五
  3. 信息学奥赛一本通 1257:Knight Moves | OpenJudge NOI 2.5 917:Knight Moves
  4. 计算机排位函数升序是0还是1,Excel中Rank函数排序的方法,包含相同数字按顺序排位和分段排序-excel排序...
  5. [深度学习概念]·梯度下降原理讲解
  6. 开发避坑3——大鸟 pk Bug(使用postman测试POST接口遇到报错(ErrorMessage:Unauthorization request ......))
  7. 源程序到可执行程序的编译过程
  8. 用CSS解决! 下拉菜单
  9. React Js 微信禁止复制链接,分享,禁止隐藏右上角菜单
  10. 基于Python实现的向量机SVM模型