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

自己做网站统计提高网站流量

自己做网站统计,提高网站流量,沈阳网站开发工程师招聘网,物流网信息平台数据的存储不是目的#xff0c;我们希望从海量的酒店数据中检索出需要的信息#xff0c;这就是ES的搜索功能 官方文档: https://elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html#query-dsl。DSL是用来查询文档的 Elasticsearch提供了基于JSON的DSL来定…数据的存储不是目的我们希望从海量的酒店数据中检索出需要的信息这就是ES的搜索功能 官方文档: https://elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html#query-dsl。DSL是用来查询文档的 Elasticsearch提供了基于JSON的DSL来定义查询简单说就是用json来描述查询条件然后发送给es服务最后es服务基于查询条件把结果返回给我们 常见的查询类型包括如下: 1、查询所有: 查询出所有数据一般在测试的时候使用 match_all 2、全文检索查询: 利用分词器对用户输入内容进行分词然后去倒排索引库中匹配 match_query multi_match_query 3、精确查询: 根据精确的词条值去查找数据一般是查找keyword、数值、日期、boolean等类型的字段。这些字段是不需要分词的但是依旧会建立倒排索引把字段的整体内容作为一个词条并存入倒排索引。在查找的时候也就不需要分词直接把搜索的内容去跟倒排索引匹配即可 ids表示根据id进行精确匹配range表示根据数值范围进行精确匹配term表示根据数据的值进行精确匹配 4、地理查询: 根据经纬度查询 geo_distance geo_bounding_box 5、复合查询: 复合查询可将上述各种查询条件组合一起合并查询条件 bool利用逻辑运算把其它查询条件组合起来 function_score用于控制相关度算分算分会影响性能 一、DSL查询语法 GET /hotel/_search {query: {match_all: {}} } 存在一个问题我们明明查询的是所有文档查询结果也显示查询出所有的文档了为什么上图右侧鼠标往下拉最多才只有10条文档数据呢 原因: 受默认的分页条件限制后面学习的时候会进行解决 二、全文检索查询 首先保证你已经做好了 实用篇-ES-环境搭建 创建了名为hotel的索引库导入了批量文档。然后开始下面的操作 全文检索查询分为下面两种会对用户输入内容进行分词之后再进行匹配。也就是利用分词器对用户输入内容进行分词然后去倒排索引库中匹配 match_query multi_match_query 【第一种全文检索查询】 match查询(也就是match_query查询): 全文检索查询的一种会对用户输入的内容进行分词然后去倒排索引库检索 GET /索引库名/_search {query: {match: {字段名: TEXT}} } 具体操作如下为了让大家知道hotel索引库有哪些字段我把当初建立gghotel索引库的类先放出来 package cn.itcast.hotel.constants;public class HotelConstants {public static final String MAPPING_TEMPLATE {\n \mappings\: {\n \properties\: {\n \id\:{\n \type\: \keyword\\n },\n \name\:{\n \type\: \text\,\n \analyzer\: \ik_max_word\,\n \copy_to\: \all\\n },\n \address\:{\n \type\: \keyword\,\n \index\:false\n },\n \price\:{\n \type\: \integer\\n },\n \score\:{\n \type\: \integer\\n },\n \brand\:{\n \type\: \keyword\,\n \copy_to\: \all\\n },\n \city\:{\n \type\: \keyword\\n },\n \starName\:{\n \type\: \keyword\\n },\n \business\:{\n \type\: \keyword\,\n \copy_to\: \all\\n },\n \location\:{\n \type\: \geo_point\\n },\n \pic\:{\n \type\:\keyword\,\n \index\: false\n },\n \all\:{\n \type\: \text\,\n \analyzer\: \ik_max_word\\n }\n }\n }\n }; }注意: 我要解释一下上面有个字段叫all那个字段是当时自定义的不清楚的话可回去看 实用篇-ES-RestClient操作 的 hotel数据结构分析。 all的作用如下图相当于一个大的字段里面存放了几个小字段优点是我们可以在这个大的字段里面搜索到多个小字段的信息 然后我们就正式开始全文检索查询输入如下。注意all换成其它字段也没事例如换成name字段。正常来说我们检索name字段就只在name字段检索匹配的分词文档但是在all字段里面检索时也会检索到name、brand、business字段原因如上面那个图的copy_to属性 GET /hotel/_search {query: {match: {all: 外滩}} }//或者如下 # 第一种全文检索查询 match。查询name字段中包含酒店的文档 GET /hotel/_search {query: {match: {name: 酒店}} } 【第二种全文检索查询】 multi_match(也就是multi_match_query查询): 与match查询类似只不过允许同时查询多个字段 GET /索引库名/_search {query: {multi_match: {query: TEXT,字段名: [FIELD1, FIELD12]}} } # 第二种全文检索查询 multi_match。查询business、brand、name字段中包含如家的文档满足一个字段即可 GET /hotel/_search {query: {multi_match: {query: 如家,fields:[business,brand,name]}} } 三、精确查询 term: 根据词条的精确值查询强调精确匹配 range: 根据值的范围查询例如金额、时间 【第一种精确查询 term】 具体操作如下 查询city为杭州 GET /hotel/_search { query:{term:{city:{value:杭州}}} } 【第二种精确查询 range】 GET /hotel/_search {query: {range: {price: {gte: 10,lte: 20}}} } 四、地理查询 根据经纬度查询。常见的使用场景包括: 查询附近酒店、附近出租车、搜索附近的人。使用方式有很多种介绍如下这种最常用 geo_distance: 查询到指定中心点以该点为圆心distance为半径的圆符合要求的所有文档 GET /索引库名/_search {query: {geo_distance: {distance: 15km,字段名: 31.21,121.5}} } 具体操作如下 输入如下DSL语句 GET /hotel/_search {query: {geo_distance: {distance: 15km,location: 31.21,121.5}} } 五、相关性算分 上面学的全文检索查询、精确查询、地理查询这三种查询在es当中都称为简单查询下面我们将学习复合查询。复合查询可以其它简单查询组合起来实现更复杂的搜索逻辑其中就有 算分函数查询 如下 首先保证你已经做好了 实用篇-ES-环境搭建 创建了名为hotel的索引库导入了批量文档。然后开始下面的操作 算分函数查询(function score): 可以控制文档相关性算分、控制文档排名。例如搜索外滩 和 如家 词条时某个文档要是都能匹配这两个词条那么在所有被搜索出来的文档当中这个文档的位置就最靠前简单说就是越匹配就排名越靠前 六、函数算分查询 上面只是简单演了相关性打分中的函数算分查询文档与搜索关键字的相关度越高打分就越高排名就越靠前。不过有的时候我们希望人为地去控制控制文档的排名例如某些文档我们就希望排名靠前一点算分高一点此时就需要使用函数算分查询下面就来学习 函数算分查询 首先保证你已经做好了 实用篇-ES-环境搭建 创建了名为gghotel的索引库导入了批量文档。然后开始下面的操作 使用 ’函数算分查询(function score query)’可以在原始的相关性算分的基础上加以修改得到一个想要的算分从而去影响文档的排名语法如下 GET /索引库名/_search {query: {function_score: {query: { match: {字段: 词条} },functions: [{filter: {term: {指定字段: 值}},算分函数: 函数结果}],boost_mode: 加权模式}} } function score需要考虑的三要素 1. 哪些文档需要算分加权 2. 算分函数是什么 3. 加权模式是什么 下面我们实现一个案例给如家这个品牌的酒店排名靠前一些 考虑三要素 1. 哪些文档需要算分加权     brand为如家的酒店 2. 算分函数是什么               weigh 3. 加权模式是什么                相加/相乘都可 输入如下DSL语句表示在 如家 这个品牌中字段为北京的酒店排名靠前一些 GET /hotel/_search {query: {function_score: {query: {match: {brand: 如家}},functions: [{filter: {term: {city: 北京}},weight: 2}],boost_mode: sum}} } 七、布尔查询 这是第二种复合查询 布尔查询不会去修改算分而是把多个查询语句组合成一起形成新查询这些被组合的查询语句被称为子查询。子查询的组合方式有如下四种 1、must必须匹配每个子查询类似与 2、should选择性匹配子查询类似或 3、must_not必须不匹配不参与算分类似非 4、filter必须匹配不参与算分 首先保证你已经做好了 实用篇-ES-环境搭建 创建了名为gghotel的索引库导入了批量文档。然后开始下面的操作 输入如下DSL语句表示搜索名字包含如家价格不高于400在坐标31.21,121.5周围10km范围内的文档 GET /hotel/_search {query: {bool: {must: [{match: {name: 如家}}],must_not: [{range: {price: {gt: 400}}}],filter: [{geo_distance: {distance: 10km,xxlocation: {lat: 31.21,lon: 121.5}}}]}} } 八、搜索结果处理 lasticsearch(称为es)支持对搜索的结果进行排序默认是根据 相关度 算分也就是score值根据score值进行排序。 可以排序的字段类型有: keyword类型、数值类型、地理坐标类型、日期类型 首先保证你已经做好了 实用篇-ES-环境搭建 创建了名为gghotel的索引库导入了批量文档。然后开始下面的操作 1. 排序 输入如下DSL语句表示对所有的文档根据评分(score)进行降序排序如果评分相同就根据价格(price)升序排序 GET /hotel/_search {query: {match_all: {}},sort: [{score: {order: desc},price: {order: asc}}] } 2. 分页 elasticsearch(称为es)默认情况下只返回前10 条数据。而如果要查询更多数据就需要修改分页参数分页参数包括from和size语法如下 GET /索引库名/_search {query: {要查询的字段: {}},from: 要查第几页, // 分页开始的位置默认为0size: 每页显示多少条文档, // 期望获取的文档总数sort: [ //表示排序{price: 排序方式}] } 输入如下DSL语句表示对所有的文档根据价格(price)进行升序排序每次分页显示20条数据看的是第六页 size默认是10表示一页显示多少条文档。from默认是0表示你要看的是第一页 GET /hotel/_search {query: {match_all: {}},sort: [{price: {order: asc}}],from: 5,size: 20 } 3. 搜索结果处理-高亮 高亮: 就是在搜索结果中把搜索关键字突出显示。高亮显示的原理如下 1、将搜索结果中的关键字用标签标记出来 2、在页面中给标签添加css样式 首先保证你已经做好了 实用篇-ES-环境搭建 创建了名为gghotel的索引库导入了批量文档。然后开始下面的操作 语法 GET /索引库名/_search {query: {match: { //match表示带关键字的查询字段: TEXT}},highlight: {fields: {字段名: {require_field_match: false,//默认是true表示 字段 要和 字段名 要一致。如果我们写的是不一致的话就需要修改为falsepre_tags: em, // 用来标记高亮字段的前置标签es会帮我们把标签加在关键字上。默认是empost_tags: /em // 用来标记高亮字段的后置标签es会帮我们把标签加在关键字上。默认是/em}}} } 总结 GET /索引库名/_search {query: {match: {字段名: 如家}},from: 0, // 分页开始的位置size: 20, // 期望获取的文档总数sort: [ { price: asc }, // 普通排序{_geo_distance : { // 距离排序location : 31.040699,121.618075, order : asc,unit : km}}],highlight: {fields: { // 高亮字段字段名: {pre_tags: em, // 用来标记高亮字段的前置标签post_tags: /em // 用来标记高亮字段的后置标签}}} }
http://www.w-s-a.com/news/901940/

相关文章:

  • 肇庆网站制作设计中国企业500强招聘
  • 苏州厂房装修宁波seo网络推广外包报价
  • 文山知名网站建设惠州哪家做网站好
  • 物流网站风格网站登录密码保存在哪里设置
  • 免费网站怎么建立icodepython基础教程
  • 无障碍网站建设方案wordpress 任务管理系统
  • iis5.1发布网站中小企业网络营销存在的问题研究论文
  • 阳泉软件定制网站建设网站可以做多语言的吗
  • 建设网站的目的及功能定位主要包括哪些内容百度关键词优化
  • 开一个小程序要多少钱宁波seo网络推广外包报价
  • 网站备案最新备案号电子商务网站建设的规章制度
  • wordpress制作单页网站导航页面鞍山信息港招聘信息
  • 屏蔽ip地址访问网站自己做衣服的网站
  • 网站建设 域名业务 邮箱哪里有网站建设中心
  • 免费网站赚钱重庆建设摩托车股份有限公司
  • 合肥水运建设工程监理网站自己买服务器能在wordpress建网站
  • wordpress积分商城主题整站seo排名要多少钱
  • 鲜花网站建设的利息分析网站设计与制作专业
  • 深圳网站建设排名做网站的公司高创
  • 杭州哪家做外贸网站全国物流网站有哪些平台
  • 企业网站建设个人博客鞍山晟宇网站建设
  • 广东省自然资源厅网站h5移动端网站模板下载
  • 网站建设和安全管理制度云南九泰建设工程有限公司官方网站
  • 网站的关键词和描述做外贸家纺资料网站
  • 绥化市建设工程网站招投标地址链接怎么生成
  • 网站制作设计发展前景网页链接制作生成二维码
  • 廊坊哪里有制作手机网站的企业网站建设费用财务处理
  • 手机网站建设书籍工商咨询服务
  • 麻花星空影视传媒制作公司网站美食网站网站建设定位
  • 网站的切图是谁来做学会网站 建设