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":{}
}