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

清河网站建设价格空气净化器用什么网站做外贸

清河网站建设价格,空气净化器用什么网站做外贸,北京建设网站公司,安次区建设局网站目录 ElasticSearch文档分值_score计算底层原理 relevance score算法 Term frequency Inverse document frequency Field-length norm 分析一个document上的_score是如何被计算出来的 分词器工作流程 切分词语 内置分词器的介绍 定制分词器 ik分词器详解 IK分词器自…目录 ElasticSearch文档分值_score计算底层原理 relevance score算法 Term frequency Inverse document frequency Field-length norm 分析一个document上的_score是如何被计算出来的 分词器工作流程 切分词语 内置分词器的介绍 定制分词器 ik分词器详解 IK分词器自定义词库 IK热更新 高亮显示 聚合搜索技术深入 bucket和metric概念简介 准备案例数据 聚合操作案例 histogram 区间统计 date_histogram区间分组 _global bucket aggsorder searchaggs filteraggs 聚合中使用filter ElasticSearch文档分值_score计算底层原理 relevance score算法 简单来说就是计算出一个索引中的文本与搜索文本他们之间的关联匹配程度 Elasticsearch使用的是 term frequency/inverse document frequency算法简称为TF/IDF算法 Term frequency 搜索文本中的各个词条在field文本中出现了多少次出现次数越多就越相关 示例doc1出现了2次 搜索请求hello worlddoc1hello you, and world is very gooddoc2hello, how are you Inverse document frequency 搜索文本中的各个词条在整个索引的所有文档中出现了多少次出现的次数越多就越不相关 示例  搜索请求hello worlddoc1hello, tuling is very gooddoc2hi world, how are you 比如说在index中有1万条documenthello这个单词在所有的document中一共出现了1000次world这个单词在所有的document中一共出现了100次那么hello的相关性就比较低了 Field-length norm field长度field越长相关度越弱 搜索请求hello world doc1{ title: hello article, content: ...... N个单词 } doc2{ title: my article, content: ...... N个单词hi world } hello world在整个index中出现的次数是一样多的doc1更相关title field更短 分析一个document上的_score是如何被计算出来的 GET /es_db/_doc/1/_explain {query: {match: {remark: java developer}} } 分词器工作流程 切分词语 给你一段句子然后将这段句子拆分成一个一个的单个的单词同时对每个单词进行normalization时态转换单复数转换分词器recall召回率搜索的时候增加能够搜索到的结果的数量 character filter在一段文本进行分词之前先进行预处理比如说最常见的就是过滤html标签spanhellospan -- hello -- andIyou -- I and you tokenizer分词hello you and me -- hello, you, and, me token filterlowercasestop wordsynonymomliked -- likeTom -- toma/the/an -- 干掉small -- little 大体步骤过滤-分词-转换 一个分词器很重要将一段文本进行各种处理最后处理好的结果才会拿去建立倒排索引 内置分词器的介绍 Set the shape to semi-transparent by calling set_trans(5)standard analyzerset, the, shape, to, semi, transparent, by, calling, set_trans, 5默认的是standardsimple analyzerset, the, shape, to, semi, transparent, by, calling, set, transwhitespace analyzerSet, the, shape, to, semi-transparent, by, calling, set_trans(5)stop analyzer:移除停用词比如a the it等等测试 POST _analyze { analyzer:standard, text:Set the shape to semi-transparent by calling set_trans(5) } 定制分词器 1默认的分词器 standard standard tokenizer以单词边界进行切分standard token filter什么都不做lowercase token filter将所有字母转换为小写stop token filer默认被禁用移除停用词比如a the it等等 2修改分词器的设置 启用english停用词token filter PUT /my_index {settings: {analysis: {analyzer: {es_std: {type: standard,stopwords: _english_}}}} }GET /my_index/_analyze {analyzer: standard,text: a dog is in the house }GET /my_index/_analyze {analyzer: es_std,text: a dog is in the house }3、 定制化自己的分词器PUT /my_index {settings: {analysis: {char_filter: {_to_and: {type: mapping,mappings: [ and]}},filter: {my_stopwords: {type: stop,stopwords: [the, a]}},analyzer: {my_analyzer: {type: custom,char_filter: [html_strip, _to_and],tokenizer: standard,filter: [lowercase, my_stopwords]}}}} }GET /my_index/_analyze {text: tomjerry are a friend in the house, a, HAHA!!,analyzer: my_analyzer }PUT /my_index/_mapping/my_type {properties: {content: {type: text,analyzer: my_analyzer}} } 大体就是定义char-filterfilter以及自定义分词器将定义的char-filter和filter定义到自定义分词器中 ik分词器详解 ik配置文件地址es/plugins/ik/config目录IKAnalyzer.cfg.xml用来配置自定义词库main.dicik原生内置的中文词库总共有27万多条只要是这些单词都会被分在一起quantifier.dic放了一些单位相关的词suffix.dic放了一些后缀surname.dic中国的姓氏stopword.dic英文停用词 ik原生最重要的两个配置文件 main.dic包含了原生的中文词语会按照这个里面的词语去分词stopword.dic包含了英文的停用词 停用词stopworda the and at but 一般像停用词会在分词的时候直接被干掉不会建立在倒排索引中 IK分词器自定义词库 1自己建立词库每年都会涌现一些特殊的流行词网红蓝瘦香菇喊麦鬼畜一般不会在ik的原生词典里 自己补充自己的最新的词语到ik的词库里面去IKAnalyzer.cfg.xmlext_dictcustom/mydict.dic补充自己的词语然后需要重启es才能生效 2自己建立停用词库比如了的啥么我们可能并不想去建立索引让人家搜索 custom/ext_stopword.dic已经有了常用的中文停用词可以补充自己的停用词然后重启es IK分词器源码下载https://github.com/medcl/elasticsearch-analysis-ik/tree IK热更新 每次都是在es的扩展词典中手动添加新词语很坑 1每次添加完都要重启es才能生效非常麻烦 2es是分布式的可能有数百个节点你不能每次都一个一个节点上面去修改 es不停机直接我们在外部某个地方添加新的词语es中立即热加载到这些新词语 IKAnalyzer.cfg.xml propertiescommentIK Analyzer 扩展配置/comment!--用户可以在这里配置自己的扩展字典 --entry keyext_dictlocation/entry!--用户可以在这里配置自己的扩展停止词字典--entry keyext_stopwordslocation/entry!--用户可以在这里配置远程扩展字典 --entry keyremote_ext_dictwords_location/entry !--用户可以在这里配置远程扩展停止词字典--entry keyremote_ext_stopwordswords_location/entry /properties 高亮显示 在搜索中经常需要对搜索关键字做高亮显示高亮显示也有其常用的参数在这个案例中做一些常用参数的介绍。 现在搜索cars索引中remark字段中包含“大众”的document。并对“XX关键字”做高亮显示高亮效果使用html标签并设定字体为红色。如果remark数据过长则只显示前20个字符。 UT /news_website {mappings: {properties: {title: {type: text,analyzer: ik_max_word},content: {type: text,analyzer: ik_max_word}}}}PUT /news_website {settings : {index : {analysis.analyzer.default.type: ik_max_word}} }PUT /news_website/_doc/1 {title: 这是我写的第一篇文章,content: 大家好这是我写的第一篇文章特别喜欢这个文章门户网站 }GET /news_website/_doc/_search {query: {match: {title: 文章}},highlight: {fields: {title: {}}} }{took : 458,timed_out : false,_shards : {total : 1,successful : 1,skipped : 0,failed : 0},hits : {total : {value : 1,relation : eq},max_score : 0.2876821,hits : [{_index : news_website,_type : _doc,_id : 1,_score : 0.2876821,_source : {title : 我的第一篇文章,content : 大家好这是我写的第一篇文章特别喜欢这个文章门户网站},highlight : {title : [我的第一篇em文章/em]}}]} }em/em表现会变成红色所以说你的指定的field中如果包含了那个搜索词的话就会在那个field的文本中对搜索词进行红色的高亮显示GET /news_website/_doc/_search {query: {bool: {should: [{match: {title: 文章}},{match: {content: 文章}}]}},highlight: {fields: {title: {},content: {}}} }highlight中的field必须跟query中的field一一对齐的2、常用的highlight介绍plain highlightlucene highlight默认posting highlightindex_optionsoffsets1性能比plain highlight要高因为不需要重新对高亮文本进行分词 2对磁盘的消耗更少DELETE news_website PUT /news_website {mappings: {properties: {title: {type: text,analyzer: ik_max_word},content: {type: text,analyzer: ik_max_word,index_options: offsets}}} }PUT /news_website/_doc/1 {title: 我的第一篇文章,content: 大家好这是我写的第一篇文章特别喜欢这个文章门户网站 }GET /news_website/_doc/_search {query: {match: {content: 文章}},highlight: {fields: {content: {}}} }fast vector highlightindex-time term vector设置在mapping中就会用fast verctor highlight1对大field而言大于1mb性能更高delete /news_websitePUT /news_website {mappings: {properties: {title: {type: text,analyzer: ik_max_word},content: {type: text,analyzer: ik_max_word,term_vector : with_positions_offsets}}} }强制使用某种highlighter比如对于开启了term vector的field而言可以强制使用plain highlightGET /news_website/_doc/_search {query: {match: {content: 文章}},highlight: {fields: {content: {type: plain}}} }总结一下其实可以根据你的实际情况去考虑一般情况下用plain highlight也就足够了不需要做其他额外的设置 如果对高亮的性能要求很高可以尝试启用posting highlight 如果field的值特别大超过了1M那么可以用fast vector highlight3、设置高亮html标签默认是em标签GET /news_website/_doc/_search {query: {match: {content: 文章}},highlight: {pre_tags: [span colorred],post_tags: [/span], fields: {content: {type: plain}}} }4、高亮片段fragment的设置GET /_search {query : {match: { content: 文章 }},highlight : {fields : {content : {fragment_size : 150, number_of_fragments : 3 }}} }fragment_size: 你一个Field的值比如有长度是1万但是你不可能在页面上显示这么长啊。。。设置要显示出来的fragment文本判断的长度默认是100 number_of_fragments你可能你的高亮的fragment文本片段有多个片段你可以指定就显示几个片段聚合搜索技术深入 bucket和metric概念简介 bucket就是一个聚合搜索时的数据分组。如销售部门有员工张三和李四开发部门有员工王五和赵六。那么根据部门分组聚合得到结果就是两个bucket。销售部门bucket中有张三和李四开发部门 bucket中有王五和赵六。metric就是对一个bucket数据执行的统计分析。如上述案例中开发部门有2个员工销售部门有2个员工这就是metric。 metric有多种统计如求和最大值最小值平均值等。 用一个大家容易理解的SQL语法来解释如select count(*) from table group by column。那么group by column分组后的每组数据就是bucket。对每个分组执行的count(*)就是metric。 准备案例数据 PUT /cars { mappings: { properties: { price: { type: long }, color: { type: keyword }, brand: { type: keyword }, model: { type: keyword }, sold_date: { type: date }, remark : { type : text, analyzer : ik_max_word } } } } POST /cars/_bulk { index: {}} { price : 258000, color : 金色, brand:大众, model : 大众迈腾, sold_date : 2021-10-28,remark : 大众中档车 } { index: {}} { price : 123000, color : 金色, brand:大众, model : 大众速腾, sold_date : 2021-11-05,remark : 大众神车 } { index: {}} { price : 239800, color : 白色, brand:标志, model : 标志508, sold_date : 2021-05-18,remark : 标志品牌全球上市车型 } { index: {}} { price : 148800, color : 白色, brand:标志, model : 标志408, sold_date : 2021-07-02,remark : 比较大的紧凑型车 } { index: {}} { price : 1998000, color : 黑色, brand:大众, model : 大众辉腾, sold_date : 2021-08-19,remark : 大众最让人肝疼的车 } { index: {}} { price : 218000, color : 红色, brand:奥迪, model : 奥迪A4, sold_date : 2021-11-05,remark : 小资车型 } { index: {}} { price : 489000, color : 黑色, brand:奥迪, model : 奥迪A6, sold_date : 2022-01-01,remark : 政府专用 } { index: {}} { price : 1899000, color : 黑色, brand:奥迪, model : 奥迪A 8, sold_date : 2022-02-12,remark : 很贵的大A6。。。 } 聚合操作案例 根据color分组统计销售数量 只执行聚合分组不做复杂的聚合统计。在ES中最基础的聚合为terms相当于SQL中的count。 在ES中默认为分组数据做排序使用的是doc_count数据执行降序排列。可以使用_key元数据根据分组后的字段数据执行不同的排序方案也可以根据_count元数据根据分组后的统计值执行不同的排序方案。 GET /cars/_search { aggs: { group_by_color: { terms: { field: color, order: { _count: desc } } } } } 统计不同color车辆的平均价格 本案例先根据color执行聚合分组在此分组的基础上对组内数据执行聚合统计这个组内数据的聚合统计就是metric。同样可以执行排序因为组内有聚合统计且对统计数据给予了命名avg_by_price所以可以根据这个聚合统计数据字段名执行排序逻辑。 GET /cars/_search { aggs: { group_by_color: { terms: { field: color, order: { avg_by_price: asc } }, aggs: { avg_by_price: { avg: { field: price } } } } } } size可以设置为0表示不返回ES中的文档只返回ES聚合之后的数据提高查询速度当然如果你需要这些文档的话也可以按照实际情况进行设置 GET /cars/_search { size : 0, aggs: { group_by_color: { terms: { field: color }, aggs: { group_by_brand : { terms: { field: brand, order: { avg_by_price: desc } }, aggs: { avg_by_price: { avg: { field: price } } } } } } } } 统计不同color不同brand中车辆的平均价格 先根据color聚合分组在组内根据brand再次聚合分组这种操作可以称为下钻分析。 Aggs如果定义比较多则会感觉语法格式混乱aggs语法格式有一个相对固定的结构简单定义aggs可以嵌套定义可以水平定义。 嵌套定义称为下钻分析。水平定义就是平铺多个分组方式。 GET /index_name/type_name/_search { aggs : { 定义分组名称最外层: { 分组策略如terms、avg、sum : { field : 根据哪一个字段分组, 其他参数 : }, aggs : { 分组名称1 : {}, 分组名称2 : {} } } } } GET /cars/_search { aggs: { group_by_color: { terms: { field: color, order: { avg_by_price_color: asc } }, aggs: { avg_by_price_color : { avg: { field: price } }, group_by_brand : { terms: { field: brand, order: { avg_by_price_brand: desc } }, aggs: { avg_by_price_brand: { avg: { field: price } } } } } } } } 统计不同color中的最大和最小价格、总价 GET /cars/_search { aggs: { group_by_color: { terms: { field: color }, aggs: { max_price: { max: { field: price } }, min_price : { min: { field: price } }, sum_price : { sum: { field: price } } } } } } 在常见的业务常见中聚合分析最常用的种类就是统计数量最大最小平均总计等。通常占有聚合业务中的60%以上的比例小型项目中甚至占比85%以上。 统计不同品牌汽车中价格排名最高的车型 在分组后可能需要对组内的数据进行排序并选择其中排名高的数据。那么可以使用s来实现top_top_hithits中的属性size代表取组内多少条数据默认为10sort代表组内使用什么字段什么规则排序默认使用_doc的asc规则排序_source代表结果中包含document中的那些字段默认包含全部字段。 GET cars/_search { size : 0, aggs: { group_by_brand: { terms: { field: brand }, aggs: { top_car: { top_hits: { size: 1, sort: [ { price: { order: desc } } ], _source: { includes: [model, price] } } } } } } } histogram 区间统计 histogram类似terms也是进行bucket分组操作的是根据一个field实现数据区间分组。 如以100万为一个范围统计不同范围内车辆的销售量和平均价格。那么使用histogram的聚合的时候field指定价格字段price。区间范围是100万-interval 1000000。这个时候ES会将price价格区间划分为 [0, 1000000), [1000000, 2000000), [2000000, 3000000)等依次类推。在划分区间的同时histogram会类似terms进行数据数量的统计count可以通过嵌套aggs对聚合分组后的组内数据做再次聚合分析。 GET /cars/_search { aggs: { histogram_by_price: { histogram: { field: price, interval: 1000000 }, aggs: { avg_by_price: { avg: { field: price } } } } } } date_histogram区间分组 date_histogram可以对date类型的field执行区间聚合分组如每月销量每年销量等。 如以月为单位统计不同月份汽车的销售数量及销售总金额。这个时候可以使用date_histogram实现聚合分组其中field来指定用于聚合分组的字段interval指定区间范围可选值有year、quarter、month、week、day、hour、minute、secondformat指定日期格式化min_doc_count指定每个区间的最少document如果不指定默认为0当区间范围内没有document时也会显示bucket分组extended_bounds指定起始时间和结束时间如果不指定默认使用字段中日期最小值所在范围和最大值所在范围为起始和结束时间。 ES7.x之前的语法 GET /cars/_search { aggs: { histogram_by_date : { date_histogram: { field: sold_date, interval: month, format: yyyy-MM-dd, min_doc_count: 1, extended_bounds: { min: 2021-01-01, max: 2022-12-31 } }, aggs: { sum_by_price: { sum: { field: price } } } } } } 执行后出现 #! Deprecation: [interval] on [date_histogram] is deprecated, use [fixed_interval] or [calendar_interval] in the future.7.X之后 GET /cars/_search { aggs: { histogram_by_date : { date_histogram: { field: sold_date, calendar_interval: month, format: yyyy-MM-dd, min_doc_count: 1, extended_bounds: { min: 2021-01-01, max: 2022-12-31 } }, aggs: { sum_by_price: { sum: { field: price } } } } } } _global bucket 在聚合统计数据的时候有些时候需要对比部分数据和总体数据。 如统计某品牌车辆平均价格和所有车辆平均价格。global是用于定义一个全局bucket这个bucket会忽略query的条件检索所有document进行对应的聚合统计。 GET /cars/_search { size : 0, query: { match: { brand: 大众 } }, aggs: { volkswagen_of_avg_price: { avg: { field: price } }, all_avg_price : { global: {}, aggs: { all_of_price: { avg: { field: price } } } } } } aggsorder 对聚合统计数据进行排序。 如统计每个品牌的汽车销量和销售总额按照销售总额的降序排列。 GET /cars/_search { aggs: { group_of_brand: { terms: { field: brand, order: { sum_of_price: desc } }, aggs: { sum_of_price: { sum: { field: price } } } } } } 如果有多层aggs执行下钻聚合的时候也可以根据最内层聚合数据执行排序。 如统计每个品牌中每种颜色车辆的销售总额并根据销售总额降序排列。这就像SQL中的分组排序一样只能组内数据排序而不能跨组实现排序。 GET /cars/_search { aggs: { group_by_brand: { terms: { field: brand }, aggs: { group_by_color: { terms: { field: color, order: { sum_of_price: desc } }, aggs: { sum_of_price: { sum: { field: price } } } } } } } } searchaggs 聚合类似SQL中的group by子句search类似SQL中的where子句。在ES中是完全可以将search和aggregations整合起来执行相对更复杂的搜索统计。 如统计某品牌车辆每个季度的销量和销售额。 GET /cars/_search { query: { match: { brand: 大众 } }, aggs: { histogram_by_date: { date_histogram: { field: sold_date, calendar_interval: quarter, min_doc_count: 1 }, aggs: { sum_by_price: { sum: { field: price } } } } } } filteraggs 在ES中filter也可以和aggs组合使用实现相对复杂的过滤聚合分析。 如统计10万~50万之间的车辆的平均价格。 GET /cars/_search { query: { constant_score: { filter: { range: { price: { gte: 100000, lte: 500000 } } } } }, aggs: { avg_by_price: { avg: { field: price } } } } 聚合中使用filter filter也可以使用在aggs句法中filter的范围决定了其过滤的范围。 如统计某品牌汽车最近一年的销售总额。将filter放在aggs内部代表这个过滤器只对query搜索得到的结果执行filter过滤。如果filter放在aggs外部过滤器则会过滤所有的数据。 12M/M 表示 12 个月。1y/y 表示 1年。d 表示天 GET /cars/_search { query: { match: { brand: 大众 } }, aggs: { count_last_year: { filter: { range: { sold_date: { gte: now-12M } } }, aggs: { sum_of_price_last_year: { sum: { field: price } } } } } }
http://www.tj-hxxt.cn/news/131338.html

相关文章:

  • php网站源码建设教程互联网创业项目排行榜
  • 网站开发报价明细济南网站seo报价
  • php网站制作工具做网站关键词必须要中文网址
  • 免费大数据查询做网站优化排名
  • 厦门 网站建设公司电话ftp上传文件到网站
  • 网站设计 布局南京 网站制作公司
  • 静态淘宝网站制作模板建设网站一般要多钱
  • 网站建设售后服务费包括哪些有没有让人做问卷的网站
  • jsp网站一个公司的网站怎么做的
  • 建设网站时的常见故障分类上海比较好的设计院
  • 简述可口可乐公司的企业网站建设wordpress注册用户验证
  • 黄岩区建设局网站飞鱼ip代理
  • win2003建网站荣耀手机商城官方网站下载
  • 闲置物品交易网站怎么做的定制开发平台
  • 响应式网站怎么设置网址seo查询
  • 坪山新区网站建设建设银行公积金预约网站首页
  • 网站推广策划案哪里有百度应用商店
  • 公司网站维护好做吗百家号和网站同步做
  • 做网站教程免费重庆互联网公司排名
  • 国外 网页框架搭建的网站商丘网信办
  • 网站开发哪个好上海做网站hlanggroup
  • 甘肃省建设厅官方网站信息网移动网站开发视频怎样嵌入
  • 镇江网站排名优化价格徐州网站推广
  • 杭州工业设计公司排名前十强宁波seo怎么做引流推广
  • 专业做网文的网站百度反馈中心
  • 工作网站开发制作抚州网站开发机构
  • 美塔基500元做网站可信吗网站诊断方法
  • 网页建站要多久常用的网站推广的方式方法
  • 长沙网站制作首页国外做文化的网站
  • 口碑最好的旅游网站网站页面制作建议