Elasticsearch学习笔记之全文搜索

前言

本篇文章摘抄于官方文档,作为学习笔记记录

  1. 全文搜索:我们希望在文本类型的域中进行搜索,还希望搜索能够理解我们的意图
    1.1 搜索UK,我们希望返回包含UK AAA,而不返回United Kindom 的文档
  2. Elasticsearch首先分析文档,之后根据结果创建倒排索引

倒排索引

  1. 一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表
  2. 为了创建倒排索引,首先将每个文档的content域拆分成单独的词(词条),创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档
    在这里插入图片描述
  3. 将词条规范为标准模式,可以找到与用户搜索的词条不完全一致,但具有足够的相关性的文档
    3.1 Quick 可以小写化为 quick
    3.2 foxes 可以 词干提取 --变为词根的格式-- 为 fox 。类似的, dogs 可以为提取为 dog
    3.3 jumped 和 leap 是同义词,可以索引为相同的单词 jump

分析与分析器

  1. 分析过程
    1.1 将一块文本分成适合于倒排索引的独立的词条
    1.2 将这些词条统一化为标准格式化以提高“搜索性”
  2. 分析器实际上是将三个功能封装到一个包里:
    2.1 字符过滤器
    (1)字符串按顺序通过每个字符过滤器:分词前整理字符串
    2.2 分词器
    (1)字符串被分词器分成单个词条
    (2)一个简单的分词器遇到空格和标点的时候,可能会将文本拆分成词条
    2.3 Token过滤器
    (1)词条按顺序通过每个token过滤器,
    (2)这个过程可能会改变词条(例如,小写化Quick),删除词条(例如,像a、and、the等无用词),或者增加词条(例如,像jump和leap这种同义词)

全文查询

该查询使用一种语法来基于操作符(and或or)解析和分割提供的查询字符串。然后,在返回匹配文档之前,查询会独立地分析每个拆分文本

GET /_search
{
  "query": {
    "query_string": {
      "query": "(new york city) OR (big apple)",
      "default_field": "content"
    }
  }
}
  1. 上面的查询,query_string查询拆分成两部分:new york city和big apple
    1.1 在返回匹配的文档之前,内容字段的分析器将每个部分独立地转换为token(因为查询语法没有使用空格作为操作符)
  2. query_string的顶级参数
    2.1 analyze_wildcard:如果true,则查询尝试分析查询字符串的通配符
    2.2 analyzer:用于将查询字符串中的文本转换为token的分析器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值