ElasticSearch学习之三【ES入门】—2.Search

ES入门公开课

2.Search

URI Search详解

正排索引与倒排索引:
在这里插入图片描述
倒排索引包含两部分:

  • 单词词典,记录所有文档的单词,记录单词到倒排列表的关联关系
    单词词典一般比较大,可以通过B+树或哈希拉链法实现,以满足高性能的插入与查询。
  • 倒排列表,记录了单词对应的文档集合,由倒排索引项组成。倒排索引项:
    文档ID
    词频TF:该单词在文档中出现的次数,用于相关性评分
    位置(Position):单词在文档中分词的位置。用于语句搜索
    偏移(Offset):记录单词的开始与结束位置,实现高亮显示

例如:ElasticSearch对应的倒排索引
在这里插入图片描述
ES的JSON文档中的每个字段,都有自己的倒排索引,可以指定对某些字段不做索引。优点:节省存储空间;缺点:字段无法被搜索


Analyzer分词

Analysis与Analyzer

Analysis——文本分析是把全文本转换成一系列单词(term/token)的过程,也叫分词。
Analysis是通过Analyzer(分词器)实现的,可以使用ES内置的分词器或按需定制分词器。
除了在数据写入时转换词条,匹配Query语句时也需要用相同的分词器对查询语句进行分析。

Analyzer 由三部分组成
• Character Filters:原始文本处理,如去除 html
• Tokenizer:按照规则切分为单词
• Token Filters:对切分单词加工、小写、删除 stopwords,增加同义词
在这里插入图片描述
ES内置的分词器:
在这里插入图片描述

使用_analyzer API

可以通过三种方式查看Analyzer是如何进行工作的:

  • 直接指定Analyzer进行测试
  • 指定索引的字段进行测试
  • 自定义分词进行测试
    在这里插入图片描述
多种分词器
  • Standard Analyzer
    默认分词器
    按词切分
    小写处理
    stopwords是默认关闭的
  • Simple Analyzer
    按照非字母切分,非字母的都被去除
    小写处理
  • Whitespace Analyzer
    按照空格切分
  • Stop Analyzer
    相比Simple Analyzer,多了stop filters,即会把the、a、is等修饰性词语去掉
  • Keyword Analyzer
    不分词,直接将输入当一个term输出
  • Pattern Analyzer
    通过正则表达式进行分词
    默认是\W+,非字符的符号进行分隔
  • Language Analyzer
    可以指定语言来处理不同语言的输入
中文分词

切分成词,而不是字
英文中单词有自然的空格作为分隔
中文在不同的上下文中有不同的理解

ICU Analyzer

需要安装plugin:Elasticsearch-plugin install analysis-icu
提供了Unicode的支持,更好的支持亚洲语言

更多中文分词器
  • IK
    支持自定义词库,支持热更新分词字典
  • THULAC
    清华大学推出的一款中文分词器

Search API概览

Search API
  • URI Search
    在URL中使用查询参数
  • Request Body Search
    使用ES提供的,基于JSON格式的更加完备的Query Domain Specific Language(DSL)

指定查询的索引:
在这里插入图片描述

URI查询

在这里插入图片描述

Request Body

在这里插入图片描述

Response

在这里插入图片描述

衡量相关性
  • Precision(查准率):尽可能返回较少的无关文档
  • Recall(查全率):尽量返回较多的相关文档
  • Ranking:是否能够按相关度进行排序?

ES提供了很多查询相关的参数来改善搜索的 Precision和Recall。


URI Search详解

在这里插入图片描述

  • 指定字段 vs. 泛查询
    q=title:2012 / q=2012
  • Term v.s Phrase
    Beautiful Mind 等效于Beautiful OR Mind
    “Beautiful Mind”,等效于Beautiful AND Mind。Phrase查询,还要求前后顺序保持一致
  • 分组与引号
    title:(Beautiful AND Mind)
    title=“Beautiful Mind”
  • 布尔操作
    AND / OR / NOT 或者 && / || /!
    必须大写
    title:(matrix NOT reloaded)
  • 分组
    +表示must
    -表示must_not
    title:(+matrix-reloaded)
  • 范围查询
    区间表示:[]闭区间,{}开区间
    year:{2019 TO 2018}
    year:[* TO 2018]
  • 算数符号
    year:>2010
    year:(>2010 && <=2018)
    year:(+>2010 +<=2018)
  • 通配符查询(效率低,占用内存大,不建议使用。特别是放在最前面)
    ?代表1个字符,*代表0或多个字符
    title:mi?d
    title:be*
  • 正则表达
    title:[bt]oy
  • 模糊匹配与近似查询
    title:befutifl~1
    title:“lord rings”~2

Request Body与Query DSL简介

在ES中,一些高阶的使用方法只能在Request Body Search中去做
在这里插入图片描述

  • 分页:
    from从0开始,默认返回10个结果
  • 排序:
    最好在“数字型”与“日期型”字段上排序
    “sort”:[{“order_date”:“desc”}]
  • _source filtering
    “_source”:[“order_date”]
    如果_source没有存储,那就只返回匹配的文档的元数据
    _source支持使用通配符
  • 脚本字段
    在这里插入图片描述
    用例:比如订单中有不同的汇率,需要结合汇率,对订单价格进行排序
  • 查询表达式-Match
    Last与Christmas间默认是OR关系
    在这里插入图片描述
  • 短语搜索-Match Phrase
    在这里插入图片描述
    这些词必须按顺序出现,并且各词中间可以有一个其他字符进入(间隔)

Query String&Simple Query String查询

Query String Query:

在这里插入图片描述

Simple Query String:
  • 类似Query String,但是会忽略错误的语法,同时只支持部分查询语法
  • 不支持AND OR NOT,会当作字符串处理
  • Term间默认关系是OR,可以指定Operator
  • 支持部分逻辑:+代替AND,|代替OR,-代替NOT
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值