ElasticSearch学习笔记(四) 检索相关
作者:互联网
查询字段解析:
_search:我们可以使用_search API来检索查询索引。搜索API的最基础的形式是没有指定任何查询的空搜索,它简单地返回集群中所有索引下的所有文档:
GET /_search
返回结果如图:
{
"hits" : {
"total" : 14,
"hits" : [
{
"_index": "us",
"_type": "tweet",
"_id": "7",
"_score": 1,
"_source": {
"date": "2014-09-17",
"name": "John Smith",
"tweet": "The Query DSL is really powerful and flexible",
"user_id": 2
}
},
... 9 RESULTS REMOVED ...
],
"max_score" : 1
},
"took" : 4,
"_shards" : {
"failed" : 0,
"successful" : 10,
"total" : 10
},
"timed_out" : false
}
返回结果内容解析:
total :查询到的结果总条数;
hits:包含 total 字段来表示匹配到的文档总数,并且一个 hits 数组默认会包含所查询结果的前十个文档。
- 在 hits 数组中每个结果包含文档的 _index 、 _type 、 _id ,加上 _source
字段。这意味着我们可以直接从返回的搜索结果中使用整个文档。 - 每个结果还有一个 _score ,它衡量了文档与查询的匹配程度。默认情况下,首先返回最相关的文档结果,就是说,返回的文档是按照 _score 降序排列的。在这个例子中,我们没有指定任何查询,故所有的文档具有相同的相关性,因此对所有的结果而言 1 是中性的 _score 。
- max_score 值是与查询所匹配文档的 _score 的最大值。
took: 执行整个搜索请求耗费了多少毫秒。
shards: 告诉我们在查询中参与分片的总数,以及这些分片成功了多少个失败了多少个。
timeout:告诉我们查询是否超时。默认情况下,搜索请求不会超时。在请求超时之前,Elasticsearch 将会返回已经成功从每个分片获取的结果。
查询相关:
//多索引查询
/gb,us/doc/_search
//单索引查询
/gb/doc/_search
查询表达式:
查询语句结构:
{
QUERY_NAME: {
FIELD_NAME: {
ARGUMENT: VALUE,
ARGUMENT: VALUE,...
}
}
}
(1)空查询:查询索引所有文档
GET /_search
{
"query": {
"match_all": {}
}
}
(2)针对某个字段查询:使用 match 查询语句 来查询 tweet 字段中包含 elasticsearch 的 tweet:
GET /_search
{
"query": {
"match": {
"tweet": "elasticsearch"
}
}
}
(3)合并查询语句:查询语句(Query clauses) 就像一些简单的组合块,这些组合块可以彼此之间合并组成更复杂的查询。这些语句可以是如下形式:
- 叶子语句(Leaf clauses) (就像 match 语句) 被用于将查询字符串和一个字段(或者多个字段)对比。
- 复合(Compound) 语句 主要用于 合并其它查询语句。 比如,一个 bool 语句 允许在你需要的时候组合其它语句,无论是 must匹配、 must_not 匹配还是 should 匹配,同时它可以包含不评分的过滤器(filters):
{
"bool": {
"must": { "match": { "tweet": "elasticsearch" }},
"must_not": { "match": { "name": "mary" }},
"should": { "match": { "tweet": "full text" }},
"filter": { "range": { "age" : { "gt" : 30 }} }
}
}
一条复合语句可以合并任何其它查询语句,包括复合语句,了解这一点是很重要的。这就意味着,复合语句之间可以互相嵌套,可以表达非常复杂的逻辑。
标签:检索,语句,tweet,笔记,查询,score,文档,ElasticSearch,match 来源: https://blog.csdn.net/weixin_43981315/article/details/117711236