当前位置:   article > 正文

Elasticsearch 8.1官网文档梳理 - 十三、Search your data(数据搜索)

Elasticsearch 8.1官网文档梳理 - 十三、Search your data(数据搜索)

Search your data

这里有两个比较有用的参数需要注意一下

  1. Search timeout:设置每个分片的搜索超时时间。从集群级别可以通过 search.default_search_timeout 来设置超时时间。如果在 search.default_search_timeout 设置的时间段内未完成搜索请求,就会取消该任务。search.default_search_timeout 的默认值为 -1 ,表示无超时时间限制。
GET /my-index-000001/_search
{
  "timeout": "2s",
  "query": {
    "match": {
      "user.id": "kimchy"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  1. track_total_hits:设置搜索过程中匹配文档的数量。如果需要匹配所有文档,track_total_hits 设置为 true,如果需要匹配的文档为 1000 条,则 track_total_hits 设置为 1000。数据量大时 track_total_hits 设置为 true 会拖慢查询速度。
GET my-index-000001/_search
{
  "track_total_hits": true,
  "query": {
    "match" : {
      "user.id" : "elkbee"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注意:
这强调一下 Response 中的 tooktook 代表处理该请求所耗费的毫秒数。从节点收到查询后开始,到返回客户端之前,包括在线程池中等待、在集群中执行分布式搜索和收集、排序所有结果所花费的时间。

一、Collapse search results

没看懂有啥用呢。。。考完试再研究

二、Filter search results

  1. post_filterfilter 过滤会将符合条件的文档留下,之后进行 聚合,而 post_filter 是在聚合后过滤结果,不影响聚合结果。
# 创建索引,添加数据
PUT /shirts
{
  "mappings": {
    "properties": {
      "brand": { "type": "keyword"},
      "color": { "type": "keyword"},
      "model": { "type": "keyword"}
    }
  }
}

POST /shirts/_bulk
{"index":{}}
{"brand": "gucci", "color": "red", "model": "slim"}
{"index":{}}
{"brand": "gucci", "color": "back", "model": "slim"}
{"index":{}}
{"brand": "gucci", "color": "back", "model": "large"}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

直接使用 filter

GET /shirts/_search
{
  "query": {
    "bool": {
      "filter": [
        { "term": { "color": "red"   }},
        { "term": { "brand": "gucci" }}
      ]
    }
  },
  "aggs": {
    "models": {
      "terms": { "field": "model" } 
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里插入图片描述
使用 post_filter

GET /shirts/_search
{
  "post_filter": {
    "bool": {
      "filter": [
        { "term": { "color": "red"   }},
        { "term": { "brand": "gucci" }}
      ]
    }
  }, 
  "aggs": {
    "models": {
      "terms": { "field": "model" } 
    }
  }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在这里插入图片描述

  1. rescore:对每个分片的查询结果的前 window_size 个文档重新评分。
POST /_search
{
   "query" : {
      "match" : {
         "message" : {
            "operator" : "or",
            "query" : "the quick brown"
         }
      }
   },
   "rescore" : {
      "window_size" : 50,
      "query" : {
         "rescore_query" : {
            "match_phrase" : {
               "message" : {
                  "query" : "the quick brown",
                  "slop" : 2
               }
            }
         },
         "query_weight" : 0.7,
         "rescore_query_weight" : 1.2
      }
   }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

三、Highlighting

从搜索结果中的一个或多个字段中获取高亮片段,并高亮显示,便于显示查询匹配的位置。
简单一点

GET my_index/_search
{
  "query": {
    "match": { "my_text": "GET" }
  },
  "highlight": {
    "fields": {
      "my_text": {"pre_tags" : ["<em>"], "post_tags" : ["</em>"]}
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

高亮显示可让您从搜索结果中的一个或多个字段中获取高亮片段,以便向用户显示查询匹配的位置。

四、Long-running searches

五、Near real-time search

六、Paginate search results

主要描述分页查询和深度查询,其中分页查询通过 fromsize 来控制,这里将不再赘述。深度查询这里主要通过 Point in time(时间点) 和 Scroll search(滚动查询)这两种方法来实现。文档中更推荐使用 Point in time 配合 search_after 来实现。

  1. Point in time 配合 search_after 实现深度分页查询
# 创建时间点
POST /my-index-000001/_pit?keep_alive=1m

# Response
{
  "id" : "8_LoAwEXa2liYW5hX3NhbXBsZV9kYXRhX2xvZ3MWTThSb1hDMUpSZS1EWnBuSjNtWG1sZwAWUmotTmxzRENUbXVCdGw0YVQyUGJPZwAAAAAAAAAEmBZBYjhlejFTQ1MxaWZLS1VST05NZnhBAAEWTThSb1hDMUpSZS1EWnBuSjNtWG1sZwAA"
}

# 利用 
GET /_search
{
  "size": 10,
  "query": {
    "term": {
      "tags.keyword": {
        "value": "success"
      }
    }
  },
  "pit": {
    "id":  "8_LoAwEXa2liYW5hX3NhbXBsZV9kYXRhX2xvZ3MWTThSb1hDMUpSZS1EWnBuSjNtWG1sZwAWeGZPTXRkbS1UX3lkd1ZsVzloVnlnZwAAAAAAAAAAfRZGSWlyWklWMlRsT05URnFocm9fakVBAAEWTThSb1hDMUpSZS1EWnBuSjNtWG1sZwAA", 
    "keep_alive": "1m"
  },
  "sort": [ 
    {"timestamp": {"order": "asc", "format": "strict_date_optional_time_nanos", "numeric_type" : "date_nanos" }}
  ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  1. Scroll search(滚动查询)实现深度分页查询
# 创建一个滚动查询
POST /kibana_sample_data_logs/_search?scroll=1m
{
  "size": 100,
  "slice": {
    "id": 0,
    "max": 2
  },
  "query": {
    "match": {
      "agent": "Mozilla"
    }
  }
}

# Response
{
  "_scroll_id" : "FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFkFiOGV6MVNDUzFpZktLVVJPTk1meEEAAAAAAAAE6hZSai1ObHNEQ1RtdUJ0bDRhVDJQYk9n",
  "took" : 5,
  "timed_out" : false
  ...
}

# 通过滚动查询实现深度分页查询
POST /_search/scroll                                                               
{
  "scroll" : "1m",                                                                 
  "scroll_id" : "FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFkFiOGV6MVNDUzFpZktLVVJPTk1meEEAAAAAAAAE6hZSai1ObHNEQ1RtdUJ0bDRhVDJQYk9n" 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

七、Retrieve inner hits

八、Retrieve selected fields

九、Search across clusters

十、Search multiple data streams and indices

十一、Search shard routing

十二、Search templates

十三、Sort search results

对返回的结果排序。这里需要注意的是,_score_docsort 中的被排序的字段的优先级一样,按照在 sort 中的排列顺序来排序。_score 表示文档的相似度得分,_doc 表示 _doc 的写入顺序。

GET /my_index/_search
{
  "sort" : [
    { "@timestamp" : {"order" : "asc", "format": "strict_date_optional_time_nanos"}},
    { "my_other_field" : "desc" },
    { "my_field": "desc" },
    "_score",
    "_doc"
  ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

也支持对 数组类型的字段进行排序,通过 mode 来选择数组中的值。

十四、kNN search

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/656437
推荐阅读