zoukankan      html  css  js  c++  java
  • ElasticSearch 2 (19)

    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

  • 相关阅读:
    SQL Server 触发器
    [转]SQL Server 存储过程
    C#-DataView及其用法
    IEnumerable和IEnumerator 详解 And迭代器
    C#多线程学习(六) 互斥对象
    GDI简单的图片处理
    C#委托的介绍(delegate、Action、Func、predicate)
    接口的理解与使用《转》
    Mysql drop、delete和truncate的区别
    如何查看笔记本CPU是几核的?
  • 原文地址:https://www.cnblogs.com/richaaaard/p/5282184.html
Copyright © 2011-2022 走看看