ToB企服应用市场:ToB评测及商务社交产业平台

标题: 大数据-176 Elasticsearch Query DSL - Filter DSL & 查询排序 & 效果高亮 [打印本页]

作者: 南飓风    时间: 2024-10-22 04:59
标题: 大数据-176 Elasticsearch Query DSL - Filter DSL & 查询排序 & 效果高亮
点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:


章节内容

上节我们完成了如下的内容:


Filter DSL

基本先容

Filter DSL:过滤器查询语言)
Filter DSL 是 Elasticsearch 提供的一种用于构建过滤查询的方式。与 query 语句不同,过滤器不会盘算与文档相干的评分,而是简单地筛选出符合条件的文档。这通常用于只关心是否匹配而不思量匹配度的情况,如日志分析、数据分类等场景。Filter 查询更高效,得当不需要盘算相干性的操作。
实际利用

Elasticsearch中的全部的查询都会触发相干度得分盘算,对于那些不需要相干度得分的场景下,Elasticsearch以过滤器的情势提供了另一种查询功能,过滤器在概念上类似于查询,但是他们有非常快的实行速度,实行速度快主要有以下两个原因:

为了明白过滤器,可以将一个查询(像是match_all,match,bool等)和一个过滤器结合起来,我们以范围过滤器为例,它答应我们通过一个区间值来过滤文档,这通常被用在数字和日期的过滤上,下面这个例子利用一个被过滤的 查询,其返回值是200到1000之间(闭区间)的书:
  1. POST /book/_search
  2. {
  3.   "query": {
  4.     "bool": {
  5.       "must": {
  6.         "match_all": {}
  7.       },
  8.       "filter": {
  9.         "range": {
  10.           "price": {
  11.             "gte": 200,
  12.             "lte": 1000
  13.           }
  14.         }
  15.       }
  16.     }
  17.   }
  18. }
复制代码
运行的效果如下图所示:

分解上面的例子,被过滤的查询包罗一个match_all查询和一个过滤器。可以在查询部门放入其他查询,在Filter部门放入其他过滤器,在上面的应用场景中,由于全部的在这个范围之内的文档都是平等的(相干度都一样),没有一个文档比另一个文档更相干。所以这个时间就要利用范围过滤器。
通常情况下,要决定利用过滤器照旧查询,你就需要问自己是否需要相干度得分,如果相干度不重要,那就利用过滤器,否则利用查询。查询和过滤器在概念上类似于SELECT WHERE语句。
查询排序

在 Elasticsearch 中,查询效果可以按不同的字段进行排序,默认情况下是按 _score(相干性得分)排序。如果想根据其他字段排序,比如时间戳或代价,可以通过在查询哀求中指定 sort 参数来完成。排序可以是升序(asc)或降序(desc),常用于电商、日志分析等需要按时间或数值排序的场景。
相干性评分

默认情况下,返回的效果都是按照相干性进行排序的,最相干的文档排在最前面,起首看看sort参数以及怎样利用它。
为了按照相干性来排序,需要将相干性表示为一个数值,在Elasticsearch中,相干性得分由一个浮点数进行表示,并在搜索效果中通过_score参数返回,默认排序是_score降序,按照相干性评分升序排序如下:
  1. # 默认查询时的排序
  2. POST /book/_search
  3. {
  4.   "query": {
  5.     "match": {"description":"solr"}
  6.   }
  7. }
复制代码
实行效果如下图所示:

字段值排序

  1. # 按照 order 字段进行排序
  2. POST /book/_search
  3. {
  4.   "query": {
  5.     "match_all": {}
  6.   },
  7.   "sort": [
  8.     {
  9.       "price": {
  10.         "order": "desc"
  11.       }
  12.     }
  13.   ]
  14. }
复制代码
实行的效果如下图所示:

多级排序

  1. # 多种排序字段
  2. POST /book/_search
  3. {
  4.   "query":{
  5.     "match_all":{}
  6.   },
  7.   "sort": [
  8.     { "price": {
  9.       "order": "desc"
  10.     }
  11.     },
  12.     {
  13.       "timestamp": {
  14.         "order": "desc"
  15.       }
  16.     }
  17.   ]
  18. }
复制代码
实行效果如下图所示:

分页查询

Elasticsearch分页的方式好坏常简单的:
  1. # 分页查询
  2. POST /book/_search
  3. {
  4.   "query": {
  5.     "match_all": {}
  6.   },
  7.   "sort": [
  8.     {
  9.       "price": {
  10.         "order": "desc"
  11.       }
  12.     }
  13.   ],
  14.   "size": 2,
  15.   "from": 0
  16. }
复制代码
实行效果如下图所示:

效果高亮

效果高亮功能用于在查询效果中突出表现匹配的关键词。当用户搜索特定的词时,Elasticsearch 可以在返回的文档中用 标签或其他 HTML 元素将匹配的关键词包裹起来,方便前端展示。这个功能常用于搜索引擎或全文检索的效果展示中,提升用户体验。
  1. POST /book/_search
  2. {
  3.   "query": {
  4.     "match": {
  5.       "name": "elasticsearch"
  6.     }
  7.   },
  8.   "highlight": {
  9.     "pre_tags": "<font color='pink'>",
  10.     "post_tags": "</font>",
  11.     "fields": [{"name":{}}]
  12.   }
  13. }
复制代码
实行的效果如下图所示:

利用match 查询的同时,加上一个highlight属性:

批量操作

Elasticsearch 提供了批量操作的 API,用于一次性实行多个操作,如插入、更新、删除等。这种批量操作可以显著进步处理大量数据的服从,淘汰与服务器的交互次数。Bulk API 在需要进行大规模数据处理或日志批量写入时非常有效。
批量查询

可以利用 mget 提供批量查询
单条查询ID的时间,比如很多个ID,一条一条的查询,网络开销好坏常大的。
  1. # 批量查询
  2. POST /_mget
  3. {
  4.   "docs" : [
  5.     {
  6.       "_index" : "book",
  7.       "_id" : 1
  8.     },
  9.     {
  10.       "_index" : "book",
  11.       "_id" : 2
  12.     }
  13.   ]
  14. }
复制代码
运行的效果如下图所示:

同一索引批量查询

  1. # book索引下检索
  2. POST /book/_mget
  3. {
  4.   "docs" : [
  5.     {
  6.       "_id" : 2
  7.     },
  8.     {
  9.       "_id" : 3
  10.     }
  11.   ]
  12. }
  13. # 当然也有一个简化的写法
  14. POST /book/_search
  15. {
  16.   "query": {
  17.     "ids" : {
  18.       "values" : ["1", "4"]
  19.     }
  20.   }
  21. }
复制代码
实行的效果如下图所示:

bulk 批量增删改

Bulk 操作表明将文档的增删改查一系列操作,通过一次哀求全部做完,淘汰网络的传输次数。
  1. POST /_bulk
  2. {"action": {"metadata"}}
  3. {"data"}
复制代码
示例:
  1. # 批量的操作,增删改查
  2. POST /_bulk
  3. { "delete": { "_index": "book", "_id": "1" }}
  4. { "create": { "_index": "book", "_id": "5" }}
  5. { "name": "test14","price":100.99 }
  6. { "update": { "_index": "book", "_id": "2"} }
  7. { "doc" : {"name" : "test"} }
复制代码
功能:

格式:

隔离:

实际用法:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4