运维开发网

elasticsearch服务器开发学习笔记(三.一)

运维开发网 https://www.qedev.com 2020-03-27 10:39 出处:网络 作者:运维开发网整理
elasticsearch服务器开发学习笔记(三.一) 初识es查询 查询es返回你需要的结果 基本查询 dsl查询, 过滤 简单的查询 POST weibobook/wapbook/_search { "version": true, "from": 2, "size":10, "query": { "query_string": { "query": "b

elasticsearch服务器开发学习笔记(三.一)

初识es查询

查询es返回你需要的结果

基本查询
dsl查询,
过滤

简单的查询

POST weibobook/wapbook/_search
{
  "version": true, 
  "from": 2,
  "size":10,
  "query": {
    "query_string": {
      "query": "book_title:美女"
    }
  }
}

分页

from 从哪里开始 
size 每页数据的多少

返回版本

version true

限制得分

min_score:0.75

获取需要返回的字段

"fields" : [ "book_title", "author","cate_name"],

 "fields" : [ *],

部分字段–尝试了下是不行的,可能需要调整

"partial_fields" : {
    "partial1" : {
      "include" : [ "titl*" ],
      "exclude" : [ "chara*" ]
} },

加上脚本字段

"script_fields" : {
"correctYear" : {
          "script" : "doc['book_id'].value - 1800"
    } },

理解es查询过程

基本的查询过程

要知道在大多数情况下, Elasticsearch需要分散查询到多个节点中,得到结果,合并它们,再获取有关文档并返回结果。 我们还没谈到的是另外三个定义查询行为的东西:查询重写、搜索类型和查询执行偏好。

查询逻辑

分散到各个分片,收集得到id和分数
再次查询得到结果

搜索的类型

POST weibobook/wapbook/_search?type=query_then_fetch

query_then_fetch:第一步,执行查询得到对文档进行排序和分级所需信息。这一步 在所有的分片上执行。然后,只在相关分片上查询文档的实际内容。不同于query_and_fetch,此查询类型返回结果的最大数量等于size参数的值。如果没有指定搜索类型, 就默认使用这个类型,前面描述过。

 query_and_fetch:这通常是最快也最简单的搜索类型实现。查询在所有分片上并行执 行(当然,任意一个主分片,只查询一个副本),所有分片返回等于size值的结果数。返 回文档的最大数量等于size的值乘以分片的数量。

 dfs_query_and_fetch:这个跟query_and_fetch类似,但相比query_and_fetch, 它包含一个额外阶段,在初始查询中执行分布式词频的计算,以得到返回文件的更精确 的得分,从而让查询结果更相关。

 dfs_query_then_fetch:与前一个dfs_query_and_ fetch一样,dfs_query_then_fetch 类似于相应的query_then_fetch,但比query_ then_fetch多了一个额外的阶段,就像 dfs_query_and_fetch一样。

count:这是一个特殊的搜索,只返回匹配查询的文档数。如果你只需要结果数量,而不 关心文档,应该使用这个搜索类型。

scan:这是另一个特殊的搜索类型,只有在要让查询返回大量结果时才用。它跟一般的 查询有点不同,因为在发送第一个请求之后,Elasticsearch响应一个滚动标识符,类似于 关系型数据库中的游标。所有查询需要在_search/scroll REST端点运行,并需要在请 求主体中发送返回的滚动标识符。

搜索执行偏好

preference=_local

_primary 只在主分片上执行搜索,不使用副本。当想使用索引中最近更新的、还没复制到副本 中的信息,这个是很有用的
_primary_first 如果主分片可用,只在主分片上执行搜索,否则才在其他分片上执行
_local 在可能的情况下,只在发送请求的节点上的可用分片上执行搜索
_only_node:node_id 只在提供标识符的节点上执行搜索
_prefer_node:node_id Elasticsearch将尝试在提供标识符的节点上执行搜素。如果该节点不可用,则使用其 他的可用节点
_shards:1,2;_local
自定义值 可以传入任何自定义字符串值,具有相同值的请求将在相同的分片上执行

搜索分配api

POST weibobook/wapbook/_search_shards?pretty
{
  "query":"match_all":{}
}
0

精彩评论

暂无评论...
验证码 换一张
取 消