ElasticSearch 2 (19) - 语言处理系列之故事开始

摘要

全文搜索是精度(尽可能少的返回不相关文档)和召回(尽可能多的返回相关文档)的战场。尽管只精确匹配用户查询的词肯定会是精确的,但这并不够。我们可能会丢失许多被用户认为相关的文档,取而代之的是我们需要扩大撒网范围,去搜索那些与原始查询不完全相同但又相关的词。

版本

elasticsearch版本: elasticsearch-2.x

内容

全文搜索是精度(尽可能少的返回不相关文档)和召回(尽可能多的返回相关文档)的战场。尽管只精确匹配用户查询的词肯定会是精确的,但这并不够。我们可能会丢失许多被用户认为相关的文档,取而代之的是我们需要扩大撒网范围,去搜索那些与原始查询不完全相同但又相关的词。

难道我们不希望在搜索 “quick brown fox” 的时候,能匹配包含 “fast brown foxes” 的文档,搜索 “Johnny Walker” 可以匹配 “Johnnie Walker” ,搜索 “Arnolt Schwarzenneger” 可以匹配 “Arnold Schwarzenegger” ?

如果现存文档正好包含用户的查询,那么它们当然应该出现在结果集的顶部,而弱匹配的文档会随后出现。如果没有完全匹配的文档,我们至少可以为用户提供潜在匹配的可能,它们甚至可能是用户搜索的初衷。

以下有一些需要处理的事情:

  • 移除如 ´^¨ 这样的变音符,那么搜索 rôle 会匹配 role ,反之亦然。参见 标记的规范化

  • 移除单复数形式间的差异( foxfoxes )或时态间的差异( jumpingjumpedjumps ),可以通过词干提取法获得每个单词的词根形式。参见 词根提取

  • 移除经常使用的普通词或停用词,如:theandor ,以提高搜索效率。参见 停用词:性能与精度

  • 包括同义词使查询 quick 也能与 fast 匹配,UK 能与 United Kingdom 匹配。参见 同义词

  • 检查拼写错误或可选拼写形式,或同音异形词的匹配,如:theirtheremeatmeetmete。参见 打字或拼写错误

在我们处理单个词语之前,需要将文本拆分成多个单词,也就是说我们需要了解词语的组成。这个问题会在 单词识别 章节中解决。

不过首先,我们还是来看看如何快速简便的开始对我们的语言进行处理。

参考

elastic.co: Dealing with Human Language

ElasticSearch 2 (19) - 语言处理系列之故事开始的更多相关文章

  1. ElasticSearch 2 (27) - 信息聚合系列之故事开始

    ElasticSearch 2 (27) - 信息聚合系列之故事开始 摘要 到目前为止,本书都在着重介绍搜索.对于搜索,我们有查询条件以及与查找到与条件匹配的集合.这个过程就和如大海捞针一样. 对于聚 ...

  2. ElasticSearch 2 (26) - 语言处理系列之打字或拼写错误

    ElasticSearch 2 (26) - 语言处理系列之打字或拼写错误 摘要 我们喜欢在对结构化数据(如:日期和价格)做查询时,结果只返回那些能精确匹配的文档.但是,好的全文搜索不应该有这样的限制 ...

  3. ElasticSearch 2 (25) - 语言处理系列之同义词

    ElasticSearch 2 (25) - 语言处理系列之同义词 摘要 词干提取有助于通过简化屈折词到它们词根的形式来扩展搜索的范围,而同义词是通过关联概念和想法来扩展搜索范围的.或许没有文档能与查 ...

  4. ElasticSearch 2 (24) - 语言处理系列之停用词:性能与精度

    ElasticSearch 2 (24) - 语言处理系列之停用词:性能与精度 摘要 在信息检索早期,磁盘和内存相较我们今天的使用只是很小的一部分.将索引空间保持在一个较小的水平是至关重要的,节省每个 ...

  5. ElasticSearch 2 (23) - 语言处理系列之词根提取

    ElasticSearch 2 (23) - 语言处理系列之词根提取 摘要 世界上大多数语言都是屈折变化的,意思是词语可以通过变形来表达不同的含义: 数(Number): fox, foxes 时态( ...

  6. ElasticSearch 2 (22) - 语言处理系列之标记规范化

    ElasticSearch 2 (22) - 语言处理系列之标记规范化 摘要 将文本拆解成标记只是工作的一半.为了使这些标记更容易被搜索到,它们需要经过一个规范化的处理过程,以移除相同单词间不重要的差 ...

  7. ElasticSearch 2 (21) - 语言处理系列之单词识别

    ElasticSearch 2 (21) - 语言处理系列之单词识别 摘要 一个英语单词相对容易识别:因为英语单词是被空格或(某些)标点符号隔开的.但在英语中也有反例:you're 这个词是一个单词还 ...

  8. ElasticSearch 2 (20) - 语言处理系列之如何开始

    ElasticSearch 2 (20) - 语言处理系列之如何开始 摘要 Elasticsearch 配备了一组语言分析器,为世界上大多数常见的语言提供良好的现成基础支持. 阿拉伯语.亚美尼亚语,巴 ...

  9. ElasticSearch 2 (18) - 深入搜索系列之控制相关度

    ElasticSearch 2 (18) - 深入搜索系列之控制相关度 摘要 处理结构化数据(比如:时间.数字.字符串.枚举)的数据库只需要检查一个文档(或行,在关系数据库)是否与查询匹配. 布尔是/ ...

随机推荐

  1. Spring之强制修改某个方法的行为(Arbitrary method replacement)

      A less commonly useful form of method injection than Lookup Method Injection is the ability to rep ...

  2. 4、JUC--CountDownLatch闭锁

    CountDownLatch  Java 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能.  CountDownLatch 一个同步辅助类,在完 ...

  3. DataGuard之Apply Services(redo应用和SQL应用)

    应用服务 Apply Services 根据oracle官方文档整理 http://docs.oracle.com/cd/E11882_01/server.112/e25608/log_apply.h ...

  4. Shell学习心得(二):传递参数、运算符

    1.传递参数 可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 向脚本传递三个参数, ...

  5. 在Node.js中操作文件系统(一)

    在Node.js中操作文件系统 在Node.js中,使用fs模块来实现所有有关文件及目录的创建,写入及删除操作.在fs模块中,所有对文件及目录的操作都可以使用同步与异步这两种方法.比如在执行读文件操作 ...

  6. JAVA框架:hibernate(二)

    一.事务操作. 代码: @Test public void tr_Up(){ Session session=hibernateUtils.getSession(); Transaction tran ...

  7. php中经常使用的string函数

    strpos() ---返回字符串在另一字符串中首次出现的位置 strrpos() ---查找字符串在另一字符串中最后出现的位置 strchr()   ===  strstr()    ---找到字符 ...

  8. SSIS ->> Excel Destination无法接受大于255个字符长度的字符字段

    从下文的链接中找到一些背景,因为Excel会以前8行作为参考,如果某个字段前8行的最长长度没有超过255个字符,就会报错.如果知道某个字段属于描述性字段,而且字段的数据长度很可能超过255个字符长度, ...

  9. 20155306 白皎 0day漏洞——基础知识

    20155306 白皎 0day漏洞--(第一篇)基础知识 写在前面: 本次免考实践方向是0day漏洞,以博客的形式记录了我的学习实践过程.第一篇博客主要围绕什么是0day漏洞以及一些以后学习中需要的 ...

  10. mfc Unicode转 ASNI ,WCHAR 转 CHAR

    知识点: 宽字符转多字节字符 多字节字符转宽字符 什么是ANSI,什么又是UNICODE呢?其实这是两种不同的编码方式标准,ANSI中的字符采用8bit,而UNICODE中的字符采用16bit 在VC ...