干货 | 响应速度与智能化如何平衡,携程酒店搜索实践

【管理科学】第六十三篇 企业管理者招聘与人才博弈战略02 编号类型领域问题问题的数学分析(含逐步推理与数值范围)方法/手段/步骤/流程/话术/策略/行为/时序的所有内容和步骤(含数学表达式与数值分析)时序数学表达式及周期行动的数学表达式(含数值范围)关联知识和法律法规651组织博弈成本控制如何在保证质量的前提下有效控制成本?逐步推理: 1. 成本控制模型:成本每降低10%,利润可提升15%~25%。但过度降本可能影响质量和员工士气。 2. 控制效果:有效的成本控制可使利润率提升5%~10%。 3. 法律风险:需遵守劳动法和产品质量法。步骤与数学表 阅读详情

作者简介

 

mczhao,携程资深软件工程师,关注自然语言处理、搜索引擎和数据库内核开发。

概览

随着线上旅游业务的不断发展,携程酒店的数据量不断增加,用户对于搜索功能的要求也在不断提高。携程酒店搜索系统是一个基于Lucene开发的类似Solar的搜索引擎系统,本文将从四个部分描述对搜索引擎的优化。

第一部分,通过优化存储来降低响应时延,提升用户体验,降低硬件成本。第二三部分,通过召回和纠错的智能化来提升用户体验。第四部分,通过重新设计搜索DSL提高业务灵活性和研发效率。本文也描述了在优化过程中遇到的各种问题和解决方法。


一、存储优化


1.1 数据压缩

在Lucene 8中,long型的数据会被自动压缩存储。我们可以去除搜索shema中原有的byte、short、int类型,对整型字段统一使用long类型存储,而不用担心其占用多余的空间。这既降低了对内存和磁盘的需求,也降低了运维的人力成本。


1.2 空间索引

在地理查询和存储这块,使用PointValues来替换原来的GeoHash索引。PointValues是从Lucene 6开始引入的一个新特性,使用kd树作为地理空间数据结构,来加速几何图形内点的过滤筛选。


踩过的坑

1)尽管Lucene官方极力宣传PointValues的性能优势,也许在二维地理搜索场景下是这样,但是在一维数据中其性能还是远逊于普通的倒排索引,甚至不如走逐个访问过滤。究其原因是PointValue中KD树的节点都是压缩存储,其CPU时间大部分消耗在对存储的解压和反序列化,造成浪费。

2)而对于高维空间的搜索,例如通过word2vec的词向量搜索某个词的相似词,无论是KD树还是VP树,其时间复杂度都会退化到不可忍受的地步。


1.3 KV存储

搜索流程不仅需要依靠倒排的索引,也需要正排的数据。在过滤和排序的搜索步骤中,需要根据主键来访问doc的一些维度信息,来判断该doc是否满足过滤条件,或者用来计算这个doc的排序分数。

在早期Solar版本中,使用了FieldCache——一种内存中SST来保存这些KV数据。从Lucene 4开始,DocValues作为KV数据的一种磁盘存储方案。在Lucene 7版本中,使用倒排索引中的DISI作为DocValues的索引,而FieldCache已经被移除。在Lucene 8版本中,DocVaues添加了jump table来增强其随机访问能力。

Lucene DocValues相对于FieldCache的优势是:

1)存储在磁盘,对内存需求减少。

2)存储经过压缩,消耗资源进一步减少。

Lucene内部的KV存储有一定局限性,例如:

1)使用磁盘的存储时,需要将byte数组反序列化,还是略慢于内存中直接存储的数据结构。

2)只能用docid作为key,如果使用业务id来访问,需要先查询倒排索引获取其docid,再访问正排数据获取值。

3)DISI存储的docid范围只能在32位整型内,当遇到单点几十亿级别的数据,就无法存储了。

在某些场景下,给酒店打排序分时,需要获取酒店到POI之间的关联分数,此类分数不仅仅是通过直线距离计算得来,还需要考虑驾车步行距离的时间,以及距离筛选的酒店点击量等等因素,所以需要一个酒店到POI之间关联的KV存储。酒店和POI数据量各自是百万级别,而一个POI周边的酒店数平均是千级别,这样他们之间关联数据条数可达数十亿。

为此,我们自研了一种Java内嵌KV存储,和Lucene的索引中"mmap"模式一样,利用JDK自带的MappedDirectedBuffer,将数据存储在磁盘上,将磁盘和内存的交换交给操作系统托管,也不会给堆内存造成压力。不同于Lucene的DISI和LevelDB的SST,考虑到减少磁盘和内存的交换,已经提高TLB的命中率,其索引是固实化(compacted)的BTree,也就是一棵用数组表示的完全n叉树,其查询的时间复杂度为对数,索引合并时间复杂度为线性。相比使用排序数组的SST,空间占用一样,优势是查询时内存页跳转减少,劣势是compact的时候需要随机访问磁盘,而不是顺序访问。


踩过的坑

1)虽然Lucene DocValues是一种磁盘存储,但由于其实现和FieldCache有着诸多相似特性,部分元数据甚至是数据本身还是需要加载到内存的,这个加载的过程在DocValues的API中是懒加载的,并且会消耗一定的时间,需要注意其争用引起的线程阻塞。最好在初次加载索引和之后,或者写线程每次flush和compact之后,触发一次DocValues的数据加载,再让读线程可见。

2)虽然Lucene DocValues支持随机访问,但其API的实现还是相对滞后。在一次请求中,不允许访问的docid大于或等于上次访问的docid,强制整个打分过程是顺序访问的。这自然有他的道理:顺序访问的性能更好。但排序过程可能依据多个分数,多个分数的计算公式中可能引用同一维度的字段,这样会造成重复访问同一doc的同一字段的DocValues,使得API报错。解决的方法是将之前查询到的字段值缓存入当期的context中,下次访问时直接获取缓存。另外一种解决方案,直接修改Lucene源代码,消除这个不必要的限制,代码位置在MultiDocValues.NumericDocValues.advanceExact和MultiDocValues.SortedNumericDocValues.advanceExact。

3)虽然可以使用MappedDirectedBuffer将存储移出JVM堆,减轻了堆GC的压力,但是当堆外内存脏块超过一定阈值,操作系统还是会触发阻塞整个进程的flush工作。解决方法是将磁盘映射文件打开为read-only,用作append-only数据库的存储。没有对现有块的修改就不会存在脏块,而内部异步compact来实现增量更新。这样,只会存在缺页加载的IO操作,被淘汰的页可以立即丢弃,而不用刷回磁盘。


二、查询智能化

当今搜索系统中,单纯的文本召回已经不能满足用户的要求。搜索引擎需要根据用户的输入,识别用户输入的语义和意图,进而修改召回和排序方式。


2.1 语义查询生成流程

1)第一步是实体标注。将实体名称作为词库给用户输入分词以后,给分出的每一个词标注实体,识别其类型和对应ID。

2)第二步是提取核心语义。例如,用户 输入” 浙江杭州西湖希尔顿”,需要识别出浙江是杭州的上级、杭州是西湖的上级,从而忽略掉” 浙江” 和” 杭州”,其核心语义就是” 西湖” 和” 希尔顿”。

3)第三步是查询生成。根据上面的核心语义” 西湖” 和” 希尔顿”,通过规则系统,生成查询,优先查找西湖周边的希尔顿集团下的酒店,即使这些酒店文本中,看不出包含” 浙江”、” 杭州”、”西湖”、”希尔顿” 中的任意一个。


2.2 语义分析的常用算法


2.2.1 上下文无关句法分析(CFG)

1)优点:可以转化为自动机,计算速度快

2)缺点:语法规则固定,不适合分析比较灵活的自然语言


2.2.2 依存句法分析

依存图的主要思想是连接短语的中心词与其依存词。用有向边把中心词与依存词连接起来。依存分析中一个重要的概念是投射性,是由单词之间依存的线性词序决定的一种约束。投射性的的依存句法等价于CFG,非投射的依存句法的描述范围比 CFG更广。

1)优点:较为灵活,规则简单

2)缺点:有的情形,时间复杂度会退化到指数级别


2.2.3 酒店联想引擎中使用的语义分析

为了克服上述经典语法分析的一些弱点,酒店联想使用一种依据知识图谱分类分层的简化依存分析方式。根据酒店的业务场景,将标注后的实体词性放入不同的bucket中,进而进一步查询bucket内部实体和bucket之间实体的关联关系,进而去除修饰词,提取核心语义。同一bucket中的实体类型可以进一步分层,例如区域类型中省份、国家、城市、景区都可以分为单独的一层,再去获取彼此之间的关系。从而避免算法复杂度的爆炸。


三、智能纠错

Lucene自带的英文单词相似度纠错,是通过ngram分词索引召回,从词库中粗筛出候选词,进一步使用Levenshtein编辑距离精筛出相似度高的词。

我们在Lucene纠错的基础上,做了更多的优化,我们的纠错会考虑上下文,纠错词库的数据来源也更加多元化,目标是使得我们的英文纠错可以媲美Bing或者Google。

3.1 LSH 局部敏感哈希

随着业务增长,作为基础语料的实体数量也在增长,纠错词库的数据量随之增长,Lucene默认的ngram召回的候选词集合开始变得不那么准确,很多的用户目标词在粗筛过后就不在候选集内,导致无法正确纠出。我们需要考虑加入不同的维度作为Hash桶,来进一步缩小粗筛的范围,比如词长是一个比较好的维度;并且调整ngram中参数n的大小,以及分词以后的查询交并关系,使有限的粗筛召回结果更加精确。


3.2 上下文纠错

只考虑单词而不考虑上下文的纠错,就像只考虑单词热度而不考虑上下文的分词,有诸多局限性。例如真词纠错case,用户输入把le meridien(艾美酒店)错输入为let meridien,单看let这个单词是并没有错的,即使认为它是错的,那么let和le直接的相似度最高也只有66.7%,看起来也不高,不一定能达到精筛过滤的相似度阈值。

所以我们在纠错的时候也需要考虑上下文。通过现有实体语料以及其热度,统计出热门的二元词组及其热度。然后在纠错词,将二元词组作为单词来进行纠错。这样也可以对用户少输入或者多输入的空格进行纠错,并且可以解决空格问题和拼写错误同时存在的场景。例如:用户输入southcoase,通过一次纠错就可以纠出south coast这个词组。

通过二元词组库的纠错,只能往前/后多看一个词的上下文,有的情况下这么短的上下文并不能判断出最佳的纠错词。这时候可以将所有实体名称作为词库来纠错,由于其数据量庞大,粗筛的桶参数调整难度更大。另一方面,由于Lucene倒排索引下都是按docid排序的,docid是按数据插入顺序自增,所以我们可以先按热度排好序建入索引,再使用totalHitsThreshold=n限制召回的匹配条数,确保粗筛召回的是最热的n条记录。


3.3 优化编辑距离算法

经典的Levenshtein编辑距离算法,其状态转移发生在矩阵的2x2的范围内,无法识别出字符交换的操作。如果我们把其状态转移方程扩充到3x3的方格内,根据行和列上各自前两个字母来计算本单元格内的距离,即可识别出字符交换的操作。除此以外还能识别出字符双写漏写为单写,以及单写漏写为双写等场景,分别根据不同场景配置不同的距离权重,可以更加精细地计算两个词的相似度。

如果把根据前两个字母算的编辑距离称为2阶编辑距离,那么2阶可以扩展到n阶,n越大,能覆盖的情形越丰富,相似度越准确,纠错效果更好。但是算法的时间复杂度也随着n几何增加。实际使用时,按场景需求选择n。这种扩充到n阶的想法来自于Damerau-Levenshtein编辑距离,Damerau-Levenshtein编辑距离是一种2阶编辑距离。

编辑距离加权的思想也是在很多NLP论文中有提到,除了处理双写、调换等场景以外,也可以处理音近词特别是一些从别的语言翻译而来的音近词,特别是旅游业务背景下,很多地名都是按当地语言翻译过来的。举个中文的例子,从英文翻译而来的亚马逊和亚马孙,从"逊"到"孙"的编辑距离权重几乎可以配置为0,意味着亚马逊和亚马孙相似度100%,类似的case在作为表音语言的韩文和俄文的翻译文本中更多。


四、搜索DSL

DSL(Domain Specific Language),中文翻译为领域特定语言,相对于GPL(General Purpose Language)通用编程语言,DSL指的是专注于某个应用程序领域的计算机语言。

James Gosling曾经说过:每个配置文件最终都会变成一门编程语言。搜索系统的复杂化导致其配置的复杂化,根据不同的用户输入核心语义、不同的用户偏好、不同的搜索上下文,生成搜索查询和排序,这样的规则系统需要复杂的配置。Lucene原本也有自带的查询语言,类似SQL,可以定义召回、排序、分页等逻辑,但这样的查询语言已经不能满足我们日益复杂的需求,严重制约了开发效率,我们需要将搜索语言扩展甚至重写,就像从SQL扩展到PL/SQL那样。


4.1 设计考量


4.1.1 降低学习成本

设计查询语言的时候,需要尽量向SQL语言看齐。SQL是大家已经广泛熟知的查询语言,语法越和SQL一致,越是降低学习难度。

在ElasticSearch的结构化DSL中,使用的是must、should、must not查询方式,这样的查询方式虽然贴合lucene底层查询方式,但是从一个没有接触过类似搜索产品的开发看来需要学习成本。在Lucene自带的查询语言中,虽然可以使用AND、OR这些交并条件,但其实现是有bug的,其运算符优先级有问题,导致一些场景优先执行OR再执行AND,需要开发小心翼翼地给所有的子表达是添加合适的括号,更不幸的是,lucene的查询语言编译器通过JavaCC自动生成,不是人手写的代码,可读性很差,很难修改。

SQL和其他GPL相比,最显著的特征是其逻辑运算符的优先级,需要低于比较运算符。另外一个特征是两个整型相除,一般数据库实现默认返回的是浮点型数据,而不是整型,对于整数相除,另外使用内置函数实现。

除了向SQL看齐,其数字类型和字符串类型的表达方式向EMCAScript看齐,因为当前JSON作为最常用的序列化方式被大家广泛熟知,JS的字符串转义也比Java更加方便。当然,EMCAScript不支持64位整型,而我们需要支持,特别是当日期时间转化为long参与计算的时候。


4.1.2 面向高性能场景

一次搜索请求中需要对召回的数以万计的doc去做过滤和计算排序分,但又对响应时间比较敏感,特别是在联想推荐的场景中,用户每输入一个字,就要立时修改推荐的内容。所以在设计语言时,需要保留对CPU和内存友好的特性:

1)基于性能考虑保留primitive type,借鉴基于C的脚本语言lua,只保留两种数值类型——整型的long和浮点型的double,并且强转系统。基础类型是现阶段ElasticSearch script的诸多实现中仍没有实现的功能。

2)查询过滤,比较字段和值时,使用lucene列式存储,即DocValues,而不是去获取行数据。

3)去除CBO(基于成本的优化器)。如果开发对执行计划了然于胸,就会发现在一些复杂场景下传统数据库中的CBO经常帮倒忙,导致我们不得不使用use index这种语法。去除CBO的同时,用不同的语法让开发可以自定义执行计划是走索引还是走过滤,降低执行计划的不确定性,也可以降低查询编译期的耗时。而RBO(基于规则的优化器)中的一些规则可以保留,比如任何条件和false取交集,默认就返回false,而不是真的去执行其查询。


4.1.3 多态

搜索语言需要支持编译时的多态,提高用户友好性。

1)函数多态,例如max函数,如果传入的是整型那么返回的也是整型,如果传入的是浮点型,返回的也是浮点型。

2)运算符多态,例如加号"+"运算,如果两边都是数值类型,那么按数值相加,并且设计合适的隐式转换规则;如果一边是字符串,那么就把两边按字符串concat起来。


支持更多的地理搜索功能

从语言层面支持地理搜索,而不需要编写各种语法糖。

除了支持常用的距离范围搜索,还利用了计算图形学的算法和KD树,支持多边形内的点的搜索、点到多边形的距离搜索,用于查询多边形区域范围内以及周边的召回。


4.1.4 安全性

搜索语言需要支持查询参数化,来避免查询脚本注入。这一点和SQL一样,ElasticSearch也已经支持参数化的script。我们对参数化进行了扩展,使其参数本身可以为一个表达式,在查询编译时预执行,实现类似Shell或者是JS中eval的功能。


4.1.5 支持描述业务流程

上文中所说的在查询编译时预执行的表达式,是一种doc无关的表达式。相比而言,查询执行时的表达式都需要传入一个docid来获取当前doc。

上文中描述的语义分析提取核心词以后,需要通过核心词以及规则系统生成新的查询和排序。这种doc无关的表达式,我们正可以用来支持规则系统这种和具体doc无关的业务逻辑,类似PL/SQL这种面向存储过程的语言,这也是ElasticSearch中暂未实现的功能。


踩过的坑

上设计一门新的语言时,不要一开始就设计为词法分析和语法分析双层编译结构,也不要一开始就设计action表,因为在设计新语言的一开始可能并不清楚词法和语法的边界在哪里,即使事先明确定义,做到一半的时候可能还会再做修改。对于语法简单的DSL,使用基于字符的递归下推自动机实现编译功能是更好的选择,对于后续的语法修改会更加灵活。


总结

搜索引擎本身对数据库事务要求不强,数据计算量比较大,是一种CPU密集型的、对响应时间敏感的信息检索系统。一方面是用户对于其智能化的需求,一方面又是用户对于其响应速度的需求,保持两者之间的平衡一直是个难题。

所幸业界有很多较为成熟的搜索产品:Solar/Lucene、ElasticSearch,也有很多可供借鉴的算法,还有很多或新或旧的存储,例如HBase、LevelDB、RocksDB等等。他山之石可以攻玉,只要我们不迷信权威,充分了解这些产品或者算法背后的实现原理,就可以站在巨人的肩膀上,更加灵活地找到适合当前场景的技术方案,甚至创造出全新的算法和工具,不断提升用户的搜索体验。

【推荐阅读】

“携程技术”公众号后台回复“新书”,

可免费获得两本书的试读样章~

《携程架构实践》

京东

当当

《携程人工智能实践》

京东

当当

 “携程技术”公众号

  分享,交流,成长

【审计专栏】【法律领域】【社会科学】 第五十六篇 企业管理层互动形态分析01 AI分析 战略官试图塑造公司“战略现实”S_s(如“未来在于AI”),业务总裁固守“运营现实”S_o(如“现金为王”)。 阅读详情

相关推荐

文档相似度比较TF*IDF算法的实现(C#)

里面有TFIDF的实现过程,配有详细的注释

开源搜索平台选型:ElasticSearch、Solr

由于系统积累的数据量越来越多(如访问日志、log4j打印的日志等)且散布在各应用的各服务器中,使得日志的查看、存储管理变得非常复杂,不得不去各机器上查找与存储管理。有没有一种平台可以省心地查找并集中存储管理好这些日志呢?经过选型比对,我们最终通过引入搜索平台来查找、管理这些日志数据。搜索平台有许多,但用的比较多的开源系统就属ElasticSearch、Solr,这两个搜索引擎都是基于建立在全文搜索引

yown的专栏 2232

别再搞混了!用示波器实测SVPWM:相电压、线电压、端电压波形到底长啥样?(附TI/ST官方笔记解读)

本文详细解析了SVPWM波形实测中的相电压、线电压和端电压的区别与测量技巧,结合TI/ST官方笔记,揭示了马鞍形波形的形成原理及常见误区。通过示波器实测案例,帮助电力电子工程师准确理解并应用这些关键概念,提升电机控制系统的调试效率。

weixin_30632883的博客 431

AI专栏 | 破局酒店搜索零结果!携程AI搜索实战,复杂查询召回率提升90%

在AI快速发展的浪潮中,传统的关键词搜索早已难以满足用户日益复杂的需求。结合携程酒店搜索业务的特点与实际需求,我们选择了基于Elasticsearch(ES)的方案,构建向量召回能力,以实现稳定可靠的向量检索与管理。这种向量搜索不仅突破了传统的关键字匹配限制,还深度理解用户的语义输入,将其需求与OTA系统中的海量信息高效关联,从而提供个性化和高度相关的搜索结果。如果在酒店搜索流程中进一步融入更智能、更贴合用户意图的语义搜索能力,将极大地改善用户的预订体验,使所有用户都能直观地感受到AI带来的便捷与精准。

携程技术 1301

SpringCloudGateway网关高频20个面试题整理

Spring Cloud Gateway 是基于 Spring 5、Project Reactor 和 Spring Boot 2 构建的 API 网关,提供动态路由、监控、弹性、安全等核心功能。Spring Cloud Gateway 是 Spring Cloud 生态中的 API 网关,用于微服务架构中的请求路由、负载均衡、限流、鉴权等。实现@Component@Override// 逻辑处理。

u012024132的专栏 1114

深度解析大语言模型中的词向量

​ 在学习完语言模型中的编码器与解码器知识后,让我们继续深入学习大语言模型中一个非常关键的技术:词向量表示,以及如何通过Transformer模型实现对next token的预测。 ​

产品老A,8年互联网大厂AIPM,专注探索新型人机交互 3281

干货 | 深度学习在携程搜索词义解析中的应用

作者简介携程旅游研发部大数据与AI研发团队,为旅游事业部提供丰富的AI技术产品和技术能力。一、背景介绍搜索是电商最重要的门面之一,大部分用户通过搜索来找到他们想要的商品,因此搜索是用户表达意图最直接的方式,也是转化率最高的流量来源之一。绝大部分的电商搜索是通过搜索框输入搜索词(Query)来完成,因此,搜索词的词义解析和意图理解成为了搜索中的重要一环。主流的搜索词义解析和Query理解需要经过纠错...

携程技术 3130

用C++手把手教你连接SimNow期货模拟盘:从CTP API封装到第一个订单(附完整代码)

本文详细介绍了如何使用C++连接SimNow期货模拟盘,从CTP API的基础架构解析到实现第一个订单的完整流程。内容涵盖CTP API的封装、SimNow环境配置、交易通道实现、行情接收与处理等核心环节,并提供完整代码示例,帮助开发者快速掌握量化交易中的期货模拟盘连接技术。

weixin_27215337的博客 327

干货 | 当你在携程搜索时,背后的推荐系统是如何工作的

作者简介葛荣亮,携程搜索部门高级研发工程师。2015年加入携程,目前主要负责搜索平台的前端+数据挖据工作。一、前言随着旅游业的发展,人们对搜索的要求越来越高。智能化大趋势...

携程技术中心 2717

YOLOv8 | 损失函数改进,最新提出的Shape-IoU,有效涨点

作为检测器定位分支的重要组成,边框回归损失在目标检测任务中发挥巨大作用。现有的边框回归方法,通常考虑了GT框与预测框之间的几何关系,通过使用边框间的相对位置与相对形状等计算损失,而忽略了边框其自身的形状与尺度等固有属性对边框回归的影响。为了弥补现有研究的不足,本文提出聚焦边框自身形状与尺度的边框回归方法。首先我们对边框回归特性进行分析,得出边框自身形状因素与尺度因素会对回归结果产生影响。

kay_545 1913

Trustzone/TEE/安全 面试100问-目录

关键词:cache学习、mmu学习、cache资料、mmu资料、arm资料、armv8资料、armv9资料、 trustzone视频、tee视频、ATF视频、secureboot视频、安全启动视频、selinux视频,cache视频、mmu视频,armv8视频、armv9视频、FF-A视频、密码学视频、RME/CCA视频、学习资料下载、免费学习资料、免费 周贺贺,baron,代码改变世界ctw,Arm精选, 资深安全架构专家,十年手机安全/SOC底层安全开发经验。擅长trustzone/tee安全产品的设计

baron-周贺贺-代码改变世界ctw 649

干货 | 携程酒店搜索引擎AWS上云实践

作者简介宮娴,携程高级后端开发工程师;Spike,携程高级后端开发专家。随着携程国际化业务的快速推进,搜索引擎作为用户体验中至关重要的一环,上云变得志在必行。本文主要分享酒店搜索引擎迁移AWS的探索与实践过程,内容将涵盖一个HTTP请求的全链路处理过程:包括从APP发出请求到网关,再到内网错综复杂的微服务,最后到所依赖的各种持久化存储。一、微服务架构带来的挑战这次上云的...

携程技术 2786

材料力学数值方法:细观力学模拟:材料断裂与损伤的细观模拟_2024-08-05_16-13-13.Tex

弹性理论是材料力学的一个重要分支,主要研究在外部载荷作用下,材料如何发生弹性变形以及如何恢复原状。这一理论基于连续介质力学,将材料视为由无数连续点组成的连续体,每个点都遵循一定的力学规律。弹性理论的核心是胡克定律,它表明在弹性范围内,应力与应变成正比关系。损伤变量ddd通常定义为0到1之间的值,其中d0d=0d0表示材料未损伤,d1d=1d1表示材料完全损伤。损伤变量可以基于不同的物理量定义,如裂纹密度、孔隙率或微观缺陷的分布。

937

干货 | 性能提升400%,ClickHouse在携程酒店数仓的实践

作者简介小琴,携程高级数据经理,负责酒店BI、数仓工作,专注于大数据应用领域多年。一、背景随着时间推移和业务的快速发展,携程酒店数据累积越来越多。目前流量日数据在3T左右,再加上各种订...

携程技术 1606

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

全球除湿机行业调研报告(2026)

除湿机是一个长期被低估、却在气候变局与健康消费双重驱动下悄然重构的全球性产业。它既没有空调那样的万众瞩目,也不像新风、空气净化器那样频繁出现在资本叙事里;但过去七年,这个行业的全球市场规模从数十亿美元稳步爬升至接近百亿美元量级,中国市场以占全球约83%的产量成为绝对制造中心,并在2024年创造出1248万台家用除湿机的历史销量峰值。

XW963258的博客 542

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

用户案例|向量引擎在携程酒店搜索中的应用场景和探索

然而,这种方法存在一定的局限性。针对于 Milvus 数据库的部署模块,集群部署方式需要部署以下 8 个组件,分别是访问代理层(proxy)、协调节点(Root coordinator,Query coordinator ,Data coordinator,Index coordinator)和执行节点(Query node,Data node,Index node)。常规的解决方案是添加同义词"好莱坞"和"荷里活"之间的关联,例如将"荷里活"作为"好莱坞"的别名,并在商区实体维护中进行相应的标注。

ZILLIZ 1479

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

日均20亿流量:携程机票查询系统的架构升级

一、 机票搜索服务概述 1. 携程机票搜索的业务特点 首先简单介绍一下机票的搜索业务:大家可能都用过携程,当你去输入目的地,然后点击搜索的时候,我们的后台就开始了紧张的工作。我们基本上会在一两秒的时间,将最优的结果反馈给用户。这个业务存在以下业务特点。 (1)高流量、低延时、高成功率 首先,我们不得不面对非常高的流量,同时,我们对搜索结果要求也很高——成功率要高,不能说查询失败,或者强说成功,我们希望能够反馈给用户最优质最新鲜的数据。 (2)多引擎聚合,SLA不一 ...

一诺 1114

干货 | 查询耗时降低2/3,携程度假搜索引擎架构优化

作者简介少伟,负责度假起价、搜索的研发工作,资深技术控。锦涛,负责度假搜索及相关子系统的建设,对搜索引擎、NLP等有浓厚兴趣。背景介绍携程度假搜索引擎(以下简称为引擎):携程度假搜索引...

携程技术 6541

干货 | 100亿+数据量,每天50W+查询,携程酒店数据智能平台实践

作者简介岳毅,携程高级研发经理,负责酒店数据智能平台研发,大数据技术创新工作。喜欢探索研究大数据的开源技术框架。背景随着大数据不断地融入到工作中,如何使大量的数据资产变现,并提供有价值...

携程技术 3497

干货 | 强化学习在携程酒店推荐排序中的应用探索

作者简介宣云儿,携程酒店排序算法工程师,主要负责酒店排序相关的算法逻辑方案设计实施。目前主要的兴趣在于排序学习、强化学习等领域的理论与应用。前言目前携程酒店绝大部分排序业...

携程技术中心 725

深度学习在搜索业务中的探索与实践

本文根据美团高级技术专家翟艺涛在2018 QCon全球软件开发大会上的演讲内容整理而成,内容有修改。 引言 2018年12月31日,美团酒店单日入住间夜突破200万,再次创下行业的新纪录,而酒店搜索在其中起到了非常重要的作用。本文会首先介绍一下酒店搜索的业务特点,作为O2O搜索的一种,酒店搜索和传统的搜索排序相比存在很大的不同。第二部分介绍深度学习在酒店搜索NLP中的应用。第三部分会介绍深度排...

weixin_33805992的博客 548

干货 | 携程酒店推荐模型优化

作者简介Yorkey,携程高级算法专家,主要从事大规模分布式推荐系统设计和算法研发工作。一、背景当用户在线上浏览酒店时,作为旅行平台,如何挑选更合适的酒店推荐给用户,降低其选择的费力度,...

携程技术 2261
上一篇: 干货 | 携程基于Quasar协程的NIO实践
下一篇: 干货 | 携程旅行App iOS工程编译优化实践
携程技术
博客等级 码龄10年 3715粉丝 324原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值