当前位置: 首页 > news >正文

网站推广的主要方法有哪些?室内装修3d动态演示效果图

网站推广的主要方法有哪些?,室内装修3d动态演示效果图,办公室装修公司哪里好,成都旅游学院简介阅前准备知识 学习 Elasticsearch (简称 ES) 的查询方式#xff0c;建议从以下几个步骤入手#xff1a; 理解 Elasticsearch 的基础概念 首先要了解 Elasticsearch 的核心概念#xff0c;例如#xff1a; Index#xff08;索引#xff09;#xff1a;相当于数据库中…阅前准备知识 学习 Elasticsearch (简称 ES) 的查询方式建议从以下几个步骤入手 理解 Elasticsearch 的基础概念 首先要了解 Elasticsearch 的核心概念例如 Index索引相当于数据库中的表每个索引中存储着类似类型的数据。Document文档相当于数据库中的一行数据每个文档以 JSON 格式存储。Shard分片和 Replica副本理解分片和副本有助于掌握数据的分布和冗余策略。 学习 DSLDomain-Specific Language查询语法 ES 提供了一种基于 JSON 的查询语言称为 DSL。学习这部分时主要包括 基本查询如 match、term、range 查询。布尔查询如 must、should、filter 这些条件组合。聚合查询如 terms 聚合、avg 聚合等用于统计数据。 示例 查询包含某个词的文档 {query: {match: {field_name: keyword}} }深入掌握过滤和分页 查询通常会使用过滤器来优化性能学会如何通过 filter 语句来减少不必要的计算。 {query: {bool: {filter: [{term: {status: active}}]}} }理解全文检索和评分机制 Elasticsearch 的优势在于它的全文检索能力理解倒排索引Inverted Index和评分机制Relevance Scoring可以帮助你构建更加精准的查询。 学习聚合Aggregations 聚合查询是 Elasticsearch 强大的功能之一能够进行复杂的数据统计和分析 terms 聚合统计字段的不同值的数量。date_histogram 聚合按日期区间统计数据。nested 聚合处理嵌套对象的聚合查询。 示例 按字段统计每个值的文档数量 {aggs: {group_by_status: {terms: {field: status}}} }Elasticsearch 交互格式 所有其他语言可以使用 RESTful API 通过端口 9200 和 Elasticsearch 进行通信你可以用你最喜爱的 web 客户端访问 Elasticsearch 。事实上正如你所看到的你甚至可以使用 curl 命令来和 Elasticsearch 交互。 一个 Elasticsearch 请求和任何 HTTP 请求一样由若干相同的部件组成 curl -XVERB PROTOCOL://HOST:PORT/PATH?QUERY_STRING -d BODY被 标记的部件 VERB适当的 HTTP 方法 或 谓词 : GET、 POST、 PUT、 HEAD 或者 DELETE。PROTOCOLhttp 或者 https如果你在 Elasticsearch 前面有一个 https 代理HOSTElasticsearch 集群中任意节点的主机名或者用 localhost 代表本地机器上的节点。PORT运行 Elasticsearch HTTP 服务的端口号默认是 9200 。PATHAPI 的终端路径例如 _count 将返回集群中文档数量。Path 可能包含多个组件例如_cluster/stats 和 _nodes/stats/jvm 。QUERY_STRING任意可选的查询字符串参数 (例如 ?pretty 将格式化地输出 JSON 返回值使其更容易阅读)BODY一个 JSON 格式的请求体 (如果请求需要的话) 测试 Elasticsearch 是否启动成功 curl http://localhost:9200/?pretty计算集群中文档的数量 curl -X GET localhost:9200/_count?pretty -H Content-Type: application/json -d {query: {match_all: {}} }索引员工文档 第一个业务需求是存储员工数据。 这将会以 员工文档 的形式存储一个文档代表一个员工。存储数据到 Elasticsearch 的行为叫做 索引 但在索引一个文档之前需要确定将文档存储在哪里。 一个 Elasticsearch 集群可以 包含多个 索引 相应的每个索引可以包含多个 类型 。 这些不同的类型存储着多个 文档 每个文档又有 多个 属性 。 Index Versus Index Versus Index 你也许已经注意到 索引 这个词在 Elasticsearch 语境中有多种含义 这里有必要做一些说明 索引名词 如前所述一个 索引 类似于传统关系数据库中的一个 数据库 是一个存储关系型文档的地方。 索引 (index) 的复数词为 indices 或 indexes 。 索引动词 索引一个文档 就是存储一个文档到一个 索引 名词中以便被检索和查询。这非常类似于 SQL 语句中的 INSERT 关键词除了文档已存在时新文档会替换旧文档情况之外。 倒排索引 关系型数据库通过增加一个 索引 比如一个 B树B-tree索引 到指定的列上以便提升数据检索速度。Elasticsearch 和 Lucene 使用了一个叫做 倒排索引 的结构来达到相同的目的。 默认的一个文档中的每一个属性都是 被索引 的有一个倒排索引和可搜索的。一个没有倒排索引的属性是不能被搜索到的。我们将在 倒排索引 讨论倒排索引的更多细节。 对于员工目录我们将做如下操作 每个员工索引一个文档文档包含该员工的所有信息。每个文档都将是 employee 类型 。该类型位于 索引 megacorp 内。该索引保存在我们的 Elasticsearch 集群中。 实践中这非常简单尽管看起来有很多步骤我们可以通过一条命令完成所有这些动作 PUT /megacorp/employee/1 {first_name : John,last_name : Smith,age : 25,about : I love to go rock climbing,interests: [ sports, music ] } 或 curl -X PUT localhost:9200/megacorp/employee/1?pretty -H Content-Type: application/json -d {first_name : John,last_name : Smith,age : 25,about : I love to go rock climbing,interests: [ sports, music ] }请求体 —— JSON 文档 —— 包含了这位员工的所有详细信息他的名字叫 John Smith 今年 25 岁喜欢攀岩。 PUT /megacorp/employee/2 {first_name : Jane,last_name : Smith,age : 32,about : I like to collect rock albums,interests: [ music ] }PUT /megacorp/employee/3 {first_name : Douglas,last_name : Fir,age : 35,about: I like to build cabinets,interests: [ forestry ] }或curl -X PUT localhost:9200/megacorp/employee/2?pretty -H Content-Type: application/json -d {first_name : Jane,last_name : Smith,age : 32,about : I like to collect rock albums,interests: [ music ] }curl -X PUT localhost:9200/megacorp/employee/3?pretty -H Content-Type: application/json -d {first_name : Douglas,last_name : Fir,age : 35,about: I like to build cabinets,interests: [ forestry ] }检索文档 目前我们已经在 Elasticsearch 中存储了一些数据 接下来就能专注于实现应用的业务需求了。第一个需求是可以检索到单个雇员的数据。 这在 Elasticsearch 中很简单。简单地执行 一个 HTTP GET 请求并指定文档的地址——索引库、类型和ID。 使用这三个信息可以返回原始的 JSON 文档 GET /megacorp/employee/1curl -X GET localhost:9200/megacorp/employee/1?pretty返回结果包含了文档的一些元数据以及 _source 属性内容是 John Smith 雇员的原始 JSON 文档 {_index : megacorp,_type : employee,_id : 1,_version : 1,found : true,_source : {first_name : John,last_name : Smith,age : 25,about : I love to go rock climbing,interests: [ sports, music ]} }轻量搜索 一个 GET 是相当简单的可以直接得到指定的文档。 现在尝试点儿稍微高级的功能比如一个简单的搜索 第一个尝试的几乎是最简单的搜索了。我们使用下列请求来搜索所有雇员 GET /megacorp/employee/_searchcurl -X GET localhost:9200/megacorp/employee/_search?pretty 可以看到我们仍然使用索引库 megacorp 以及类型 employee但与指定一个文档 ID 不同这次使用 _search 。返回结果包括了所有三个文档放在数组 hits 中。一个搜索默认返回十条结果。 {took: 6,timed_out: false,_shards: { ... },hits: {total: 3,max_score: 1,hits: [{_index: megacorp,_type: employee,_id: 3,_score: 1,_source: {first_name: Douglas,last_name: Fir,age: 35,about: I like to build cabinets,interests: [ forestry ]}},{_index: megacorp,_type: employee,_id: 1,_score: 1,_source: {first_name: John,last_name: Smith,age: 25,about: I love to go rock climbing,interests: [ sports, music ]}},{_index: megacorp,_type: employee,_id: 2,_score: 1,_source: {first_name: Jane,last_name: Smith,age: 32,about: I like to collect rock albums,interests: [ music ]}}]} }注意返回结果不仅告知匹配了哪些文档还包含了整个文档本身显示搜索结果给最终用户所需的全部信息。 接下来尝试下搜索姓氏为 Smith 的雇员。为此我们将使用一个 高亮 搜索很容易通过命令行完成。这个方法一般涉及到一个 查询字符串 query-string 搜索因为我们通过一个URL参数来传递查询信息给搜索接口 GET /megacorp/employee/_search?qlast_name:Smithcurl -X GET localhost:9200/megacorp/employee/_search?qlast_name:Smithpretty 我们仍然在请求路径中使用 _search 端点并将查询本身赋值给参数 q 。返回结果给出了所有的 Smith {...hits: {total: 2,max_score: 0.30685282,hits: [{..._source: {first_name: John,last_name: Smith,age: 25,about: I love to go rock climbing,interests: [ sports, music ]}},{..._source: {first_name: Jane,last_name: Smith,age: 32,about: I like to collect rock albums,interests: [ music ]}}]} }使用查询表达式搜索 Query-string 搜索通过命令非常方便地进行临时性的即席搜索 但它有自身的局限性参见 轻量 搜索 。Elasticsearch 提供一个丰富灵活的查询语言叫做 查询表达式 它支持构建更加复杂和健壮的查询。 领域特定语言 DSL 使用 JSON 构造了一个请求。我们可以像这样重写之前的查询所有名为 Smith 的搜索 GET /megacorp/employee/_search {query : {match : {last_name : Smith}} }curl -X GET localhost:9200/megacorp/employee/_search?pretty -H Content-Type: application/json -d {query : {match : {last_name : Smith}} }返回结果与之前的查询一样但还是可以看到有一些变化。其中之一是不再使用 query-string 参数而是一个请求体替代。这个请求使用 JSON 构造并使用了一个 match 查询属于查询类型之一后面将继续介绍。 更复杂的搜索 现在尝试下更复杂的搜索。 同样搜索姓氏为 Smith 的员工但这次我们只需要年龄大于 30 的。查询需要稍作调整使用过滤器 filter 它支持高效地执行一个结构化查询。 GET /megacorp/employee/_search {query : {bool: {must: {match : {last_name : smith }},filter: {range : {age : { gt : 30 } }}}} }curl -X GET localhost:9200/megacorp/employee/_search?pretty -H Content-Type: application/json -d {query : {bool: {must: {match : {last_name : smith }},filter: {range : {age : { gt : 30 } }}}} }1、这部分与我们之前使用的 match 查询 一样。 2、这部分是一个 range 过滤器 它能找到年龄大于 30 的文档其中 gt 表示_大于_(great than)。 目前无需太多担心语法问题后续会更详细地介绍。只需明确我们添加了一个 过滤器 用于执行一个范围查询并复用之前的 match 查询。现在结果只返回了一名员工叫 Jane Smith32 岁。 {...hits: {total: 1,max_score: 0.30685282,hits: [{..._source: {first_name: Jane,last_name: Smith,age: 32,about: I like to collect rock albums,interests: [ music ]}}]} }全文搜索 截止目前的搜索相对都很简单单个姓名通过年龄过滤。现在尝试下稍微高级点儿的全文搜索——一项 传统数据库确实很难搞定的任务。 搜索下所有喜欢攀岩rock climbing的员工 GET /megacorp/employee/_search {query : {match : {about : rock climbing}} }curl -X GET localhost:9200/megacorp/employee/_search?pretty -H Content-Type: application/json -d {query : {match : {about : rock climbing}} }显然我们依旧使用之前的 match 查询在about 属性上搜索 “rock climbing” 。得到两个匹配的文档 {...hits: {total: 2,max_score: 0.16273327,hits: [{..._score: 0.16273327, _source: {first_name: John,last_name: Smith,age: 25,about: I love to go rock climbing,interests: [ sports, music ]}},{..._score: 0.016878016, _source: {first_name: Jane,last_name: Smith,age: 32,about: I like to collect rock albums,interests: [ music ]}}]} }相关性得分 Elasticsearch 默认按照相关性得分排序即每个文档跟查询的匹配程度。第一个最高得分的结果很明显John Smith 的 about 属性清楚地写着 “rock climbing” 。 但为什么 Jane Smith 也作为结果返回了呢原因是她的 about 属性里提到了 “rock” 。因为只有 “rock” 而没有 “climbing” 所以她的相关性得分低于 John 的。 这是一个很好的案例阐明了 Elasticsearch 如何 在 全文属性上搜索并返回相关性最强的结果。Elasticsearch中的 相关性 概念非常重要也是完全区别于传统关系型数据库的一个概念数据库中的一条记录要么匹配要么不匹配。 短语搜索 找出一个属性中的独立单词是没有问题的但有时候想要精确匹配一系列单词或者_短语_ 。 比如 我们想执行这样一个查询仅匹配同时包含 “rock” 和 “climbing” 并且 二者以短语 “rock climbing” 的形式紧挨着的雇员记录。 为此对 match 查询稍作调整使用一个叫做 match_phrase 的查询 GET /megacorp/employee/_search {query : {match_phrase : {about : rock climbing}} }curl -X GET localhost:9200/megacorp/employee/_search?pretty -H Content-Type: application/json -d {query : {match_phrase : {about : rock climbing}} }毫无悬念返回结果仅有 John Smith 的文档。 {...hits: {total: 1,max_score: 0.23013961,hits: [{..._score: 0.23013961,_source: {first_name: John,last_name: Smith,age: 25,about: I love to go rock climbing,interests: [ sports, music ]}}]} }高亮搜索 许多应用都倾向于在每个搜索结果中 高亮 部分文本片段以便让用户知道为何该文档符合查询条件。在 Elasticsearch 中检索出高亮片段也很容易。 再次执行前面的查询并增加一个新的 highlight 参数 GET /megacorp/employee/_search {query : {match_phrase : {about : rock climbing}},highlight: {fields : {about : {}}} }curl -X GET localhost:9200/megacorp/employee/_search?pretty -H Content-Type: application/json -d {query : {match_phrase : {about : rock climbing}},highlight: {fields : {about : {}}} }当执行该查询时返回结果与之前一样与此同时结果中还多了一个叫做 highlight 的部分。这个部分包含了 about 属性匹配的文本片段并以 HTML 标签 em/em 封装 {...hits: {total: 1,max_score: 0.23013961,hits: [{..._score: 0.23013961,_source: {first_name: John,last_name: Smith,age: 25,about: I love to go rock climbing,interests: [ sports, music ]},highlight: {about: [I love to go emrock/em emclimbing/em ]}}]} }分析 终于到了最后一个业务需求支持管理者对员工目录做分析。 Elasticsearch 有一个功能叫聚合aggregations允许我们基于数据生成一些精细的分析结果。聚合与 SQL 中的 GROUP BY 类似但更强大。 举个例子挖掘出员工中最受欢迎的兴趣爱好 GET /megacorp/employee/_search {aggs: {all_interests: {terms: { field: interests }}} } 或 curl -X GET localhost:9200/megacorp/employee/_search?pretty -H Content-Type: application/json -d {aggs: {all_interests: {terms: { field: interests }}} }暂时忽略掉语法直接看看结果 {...hits: { ... },aggregations: {all_interests: {buckets: [{key: music,doc_count: 2},{key: forestry,doc_count: 1},{key: sports,doc_count: 1}]}} }可以看到两位员工对音乐感兴趣一位对林业感兴趣一位对运动感兴趣。这些聚合的结果数据并非预先统计而是根据匹配当前查询的文档即时生成的。如果想知道叫 Smith 的员工中最受欢迎的兴趣爱好可以直接构造一个组合查询 GET /megacorp/employee/_search {query: {match: {last_name: smith}},aggs: {all_interests: {terms: {field: interests}}} }curl -X GET localhost:9200/megacorp/employee/_search?pretty -H Content-Type: application/json -d {query: {match: {last_name: smith}},aggs: {all_interests: {terms: {field: interests}}} }all_interests 聚合已经变为只包含匹配查询的文档 ...all_interests: {buckets: [{key: music,doc_count: 2},{key: sports,doc_count: 1}]}聚合还支持分级汇总 。比如查询特定兴趣爱好员工的平均年龄 GET /megacorp/employee/_search {aggs : {all_interests : {terms : { field : interests },aggs : {avg_age : {avg : { field : age }}}}} }curl -X GET localhost:9200/megacorp/employee/_search?pretty -H Content-Type: application/json -d {aggs : {all_interests : {terms : { field : interests },aggs : {avg_age : {avg : { field : age }}}}} }得到的聚合结果有点儿复杂但理解起来还是很简单的 ...all_interests: {buckets: [{key: music,doc_count: 2,avg_age: {value: 28.5}},{key: forestry,doc_count: 1,avg_age: {value: 35}},{key: sports,doc_count: 1,avg_age: {value: 25}}]}输出基本是第一次聚合的加强版。依然有一个兴趣及数量的列表只不过每个兴趣都有了一个附加的 avg_age 属性代表有这个兴趣爱好的所有员工的平均年龄。 即使现在不太理解这些语法也没有关系依然很容易了解到复杂聚合及分组通过 Elasticsearch 特性实现得很完美能够提取的数据类型也没有任何限制。
http://www.hkea.cn/news/14488119/

相关文章:

  • 做网站需要的执照wordpress切换固定链接404
  • 网站流量与带宽国外网页设计评论网站
  • 企业网站的主要内容广州越秀区核酸检测点
  • 建站公司网站模板网页视频制作
  • 单品网站怎么建设棋牌网站搭建公司
  • 站长论坛 激活网站民治做网站公司
  • 厦门做网站多少百度竞价是什么意思?
  • 北京公司网站建wordpress可以做淘宝
  • 婚纱网站怎么做seo网站备案 主办单位
  • 物流怎么弄网站网站建设制作模板网站怎么做
  • wordpress爱好者论坛重庆网站建设seo公司
  • 微网站如何建设网站建设361
  • 青州建网站本地运行wordpress
  • 经典网站设计网站保定百度首页优化
  • 网站建设谈单情景对话用易语言做攻击网站软件下载
  • 淘宝指数网站网站开发算软件开发吗
  • 在小网站上做点击广告wordpress投递文章插件
  • 建设银行流水账网站查询网站没有在工信部备案
  • 网站云模板网站开发相关会议
  • 沈阳网站建设模块维护目前最好用的网络管理软件
  • 成都网页编辑器开发英文网站seo推广
  • 怎么做网站zwnet通河县机场建设网站
  • 公司企业网站有哪些虚拟空间怎么做网站目录指向
  • 小网站做几个关键词生产管理软件app
  • 10个免费网站重庆建设工程招标投标交易信息网
  • 价格便宜的网站建设高校网站建设规范
  • 北京网站优化对策如何给网站做地图
  • 案例学 网页设计与网站建设班级优化大师官网下载
  • 山西疾控最新通告今天汕头网络推广seo渠道
  • 如何给网站更换域名市场调研报告500字