基本知识

查询结果返回设置:版本值、得分限制、定制返回字段

{
"version":true,
"min_score":0.75,
"fields":["a", "b"],
"query":{
...
}
}

定制字段的返回,从性能角度考虑,不如直接返回_source

搜索类型

通过search_type设置,请求类型是:

  1. query_then_fetch:默认设置。第一步在所有分片上执行查询得到对文档进行排序和分级所需信息,然后,在相关分片上查询文档的实际内容。该查询类型返回结果的最大数量等于size参数的值。
  2. query_and_fetch:最快最简单的搜索类型,所有分片并行查询,每个分片返回等于size值得结果数。
  3. dfs_query_and_fetch:相比query_and_fetch多包含一个额外阶段,在初始查询中执行分布式词频计算,返回的得分更加精确。
  4. dfs_query_then_fetch:相比query_then_fetch多包含一个额外阶段,在初始查询中执行分布式词频计算,返回的得分更加精确。
  5. count:只返回匹配的文档的数量,不返回文档
  6. scan:遍历查询,不计算得分。

搜索执行偏好

参数值 描述
_primary 只在主分片上执行搜索,不使用副本。
_primary_first 如果主分片可用,只在主分片上搜索,否则在其他分片执行
_local 只在发送请求的节点上的可用分片上执行搜索
_only_node:node_id 只在提供标示符的节点上搜索
_prefer_node:node_id Elasticsearch尝试在提供标示符的节点上搜索,否则,使用其他节点
_shards:1,2 在提供标示符的分片上执行,可以和其他首选项合并,但_shards必须在前。_shards:1,2;_local
自定义值 传入自定义的字符串

基本查询

  1. 词条查询(term)
  2. 多词条查询,通过mininum_match指定最小匹配的词条数量
  3. match_all查询
  4. query_string查询。支持全部的Apache Lucene查询语法
  5. 标示符查询。针对内部的_id字段
  6. more_like_this查询
  7. 最大分查询(dismax)。它非常有用,会生成一个由所有子查询返回的文档组成的并集。我们可以控制较低得分的子查询对文档最后得分的影响。最后得分是这样计算的:最高分数的子查询的得分之和,加上其余子查询的得分之和乘以tie参数的值,通过tie参数控制较低得分的查询对最后得分的影响
  8. 加权查询(boosting)。该查询封装了两个查询,有三个节点需要定义:positive部分包含所返回文档得分不会被改变;negative部分返回的文档得分将被降低;negative_boost部分包含降低negative部分查询得分的加权值
  9. constant_score查询。封装一个查询,被封装查询返回文档得分设置成一个常数

此外,elasticsearch还支持:前缀查询,模糊查询,通配符查询,正则查询

词条和多词条查询elasticsearch没有分析过程。

过滤器类型

  1. 范围过滤器
  2. exists过滤器
  3. missing过滤器
  4. 脚本过滤器
  5. 类型过滤器,指的是索引的类型
  6. 限定过滤器:限定单个分片返回的文档数目
  7. 标示符过滤器
  8. 命名过滤器。可以给过滤器指定名称,这样当过滤器很复杂时,就可以在查看返回结果中某一文档匹配了哪些过滤器

过滤器缓存:有些过滤器是默认缓存的,有些过滤器则不能缓存(即使打开也是无效的)。通过_cache参数设置

高亮

Lucene提供了三种类型的高亮实现:标准类型;FastVectorHighlighter,它需要词向量和位置才能工作;PostingsHighlighter,信息高亮器(字段定义中的index_options属性设为offsets),对单个词条的查询更智能,匹配句子结束边界。

Elasticsearch会自动选择正确的高亮实现方式,如果字段的配置中,term_vector属性设成了with_positings_offsets,则将使用FastVectorHighlighter。使用词向量将导致索引变大,但高亮执行时间更少,对于存储大量数据的字段来说,推荐使用FastVectorHighlighter

高亮的所有设置既可以在所有字段上设置,也可以针对某个字段单独设置(全局控制和局部控制)。

require_field_match控制高亮的字段只与查询时指定的字段对应,不会显示其他字段的符合条件的高亮信息。

控制高亮的片段

number_of_fragments:返回高亮片段的数量,默认是5。如果设置为0,整个字段将会返回,对于短字段可以这样设置。

fragment_size:高亮片段的最大字符长度,默认值是100

验证查询

ES查询时把请求发送到_search端点,有时候不知道DSL或定义语句是否正确时,将请求发送到_validate_query端点验证请求的正确性(有的错误请求无返回结果,这时无法判断是没有符合要求的数据还是请求错误)。

验证的命令如下

curl -XGET 'localhost:9200/index/_validate/query?pretty&explain' --data-binary @query.json

query.json是命令文件

数据排序

默认的排序是根据得分降序排序,可以通过{"sort":{"_sort":asc}}对结果升序排序

还可以指定字段进行排序,这个字段最好不要分析。

通过这查询中设置missing可以指定缺失字段在查询结果中的排列位置。

查询重写

任何涉及多词条的查询,如前缀查询或通配符查询,都会使用查询重写。它把原始的昂贵的查询修改成一组不太昂贵的查询。

Lucene内部的倒排索引机制记录了词条,对查询进行重写的时候,将条件匹配相关的词条,从而改写查询。

{
"query":{
"prefix":{
"title":"s",
"rewrite":"constant_score_boolean"
}
}
}

rewrite指定了重写的策略:

  • scoring_boolean:该选项将每个生成的词项转化为布尔查询中的一个或从句(Boolean should clause)。这种改写方法需要针对每个文档都计算得分。因此,这种方法比较耗费CPU,而且有些查询生成了太多的词项,以至于超出了布尔查询默认的1024个从句的限制。默认的布尔查询限制可以通过设置Elasticsearch.yml文件的index.query.bool.max_clause_count属性来修改。改写后的布尔查询的从句数越多,查询性能越低
  • constant_score_boolean:该选项与前面提到过的scoring_boolean类似,但是CPU耗费更少,这是因为并不计算每个从句的得分,而是每个从句得到一个与查询权重相同的一个常数得分,默认情况下等于1,我们也可以通过设置查询权重来改变这个默认值。与scoring_boolean类似,该选项也有布尔从句数的限制。
  • constant_score_filter(默认选项):在匹配的词项较少时,与constant_score_boolean类似,匹配的词项较多时,会遍历并查询所有的词项,然后使用相同的常数得分。文档数量较多时,好于上面两个。
  • top_terms_N:与scoring_boolean相似之处在于都会对从句计算得分,不同之处在于,该方法只保留最佳的N个词项,以避免触及布尔从句数的限制,并提升查询整体性能。
  • top_terms_boost_N:该选项与top_terms_N类似,不同之处在于它的文档得分不是通过计算得出的,而是被设置为跟查询权重(boost)一致,默认值为1。

需要性能更好,但忍受低精度选用topN,需要高精度,但忍受低性能选择constant_score_boolean

Elasticsearch--搜索的更多相关文章

  1. 一次 ElasticSearch 搜索优化

    一次 ElasticSearch 搜索优化 1. 环境 ES6.3.2,索引名称 user_v1,5个主分片,每个分片一个副本.分片基本都在11GB左右,GET _cat/shards/user 一共 ...

  2. ElasticSearch搜索介绍四

    ElasticSearch搜索 最基础的搜索: curl -XGET http://localhost:9200/_search 返回的结果为: { "took": 2, &quo ...

  3. Elasticsearch搜索结果返回不一致问题

    一.背景 这周在使用Elasticsearch搜索的时候遇到一个,对于同一个搜索请求,会出现top50返回结果和排序不一致的问题.那么为什么会出现这样的问题? 后来通过百度和google,发现这是因为 ...

  4. ElasticStack学习(六):ElasticSearch搜索初探

    一.ElasticSearch搜索介绍 1.ElasticSearch搜索方式主要分为以下两种: 1).URI Search:此种查询主要是使用Http的Get方法,在URL中使用查询参数进行查询: ...

  5. Elasticsearch搜索调优权威指南 (2/3)

    本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/AAkVdzmkgdBisuQZldsnvg 英文原文:https://qbox.io/blog/el ...

  6. Elasticsearch搜索调优权威指南 (1/3)

    本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/qwkZKLb_ghmlwrqMkqlb7Q英文原文:https://qbox.io/blog/ela ...

  7. kotlin + springboot启用elasticsearch搜索

    参考自: http://how2j.cn/k/search-engine/search-engine-springboot/1791.html?p=78908 工具版本: elasticsearch ...

  8. Elasticsearch 搜索API

    章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...

  9. Elasticsearch 搜索数据

    章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...

  10. Elasticsearch搜索资料汇总

    Elasticsearch 简介 Elasticsearch(ES)是一个基于Lucene 构建的开源分布式搜索分析引擎,可以近实时的索引.检索数据.具备高可靠.易使用.社区活跃等特点,在全文检索.日 ...

随机推荐

  1. 一 hadoop 相关介绍

    hadoop 相关介绍 hadoop的首页有下面这样一段介绍.对hadoop是什么这个问题,做了简要的回答. The Apache™ Hadoop® project develops open-sou ...

  2. Centos系统备份

    使用root用户切换到根目录 然后,使用下面的命令备份完整的系统: tar cvpzf backup.tgz / --exclude=/proc --exclude=/lost+found --exc ...

  3. react 项目实战(九)登录与身份认证

    SPA的鉴权方式和传统的web应用不同:由于页面的渲染不再依赖服务端,与服务端的交互都通过接口来完成,而REASTful风格的接口提倡无状态(state less),通常不使用cookie和sessi ...

  4. ubuntu11.04 编译ffmpeg2.7 并生成 ffplay进行流媒体測试

    源代码安装方式: 1. 先下载ffmpeg 安装包 到官网上 http://ffmpeg.org/download.html#releases 下载.选择Download gzip tarball. ...

  5. script标签async和defer的区别及作用

    作用: 1.没有 defer 或 async,浏览器会立即加载并执行指定的脚本,也就是说不等待后续载入的文档元素,读到就加载并执行. 2.async 属性表示异步执行引入的 JavaScript,与 ...

  6. 《从零開始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式

    原创文章,欢迎转载.转载请注明:关东升的博客   MVC(Model-View-Controller,模型-视图-控制器)模式是相当古老的设计模式之中的一个,它最早出如今Smalltalk语言中. 如 ...

  7. linux 经常使用网络命令

    1. ifconfig ifconfig主要是能手动启动.观察和改动网络接口的相关參数.能改动的參数许多,包含IP參数及MTU等都能改动,他的语法例如以下:  [root@linux ~]# ifco ...

  8. 如何理解scrapy Selector

    1 scrapy Selector是什么 Selector对象本质上是对DOM tree的子树的抽象,这种抽象的目的是用于定位我们感兴趣的node.比如某次http response是一棵完整的DOM ...

  9. qq 空间视频地址 的 有效期 403

    大约 在24-48小时内 200 http://vwecam.gtimg.com/1006_aa21a85ef3d245f19535cf2ab941ccbb.f0.mp4?ptype=http& ...

  10. http ssl

    http ssl