欢迎您,来到孕妇堂!

孕妇堂首页|手机版

当前位置:首页 > 生活知识 > 生活

搜索附近的人代码

时间:2023-11-25 10:00:07 浏览:75

老板突然想上网找一个离方圆一公里的商业代理。明天上线!接到这个要求的时候差点吐血,时间太紧了。赶紧查查相关技术选型。经过很多麻烦,终于在晚上10点满足了这个需求,现在总结一下实现的大致思路。

2.mysql不适合

在满足需求的时候,首先要考虑现有的东西能不能满足,代价是什么。

我首先想到的是mysql。毕竟,大部分数据应该坚持到mysql.然而,使用mysql需要geohash.的自我计算。需要使用大量的数学和几何计算,并需要学习地理相关知识。门槛高,短时间内不可能完成要求。从长远来看,这不是mysql擅长的领域,因此不予考虑。

geohash可以参考其他文献

2.redis中的地球同步轨道

redis是最熟悉的k-v数据库,它经常被用作高性能缓存数据库,并将在大多数项目中使用。自3.2版本以来,它提供了geo能力,用于实现附近位置、距离计算等依赖于地理位置信息的功能。geo"s的相关命令如下:

redis命令描述geohash返回一个或多个位置元素的geohash,这意味着geopos从key返回所有给定位置元素的位置(经度和纬度)。geodist返回两个给定位置之间的距离。地球位于给定的纬度和经度的中心。找出一定半径内的元素geoadd将指定的地理空间位置(纬度、经度、名称)添加到指定的关键georadiusbymember找出指定范围内的元素,中心点由给定的位置元素确定

redis会假设地球是一个完美的球体,所以可能会有一些位置计算偏差,据说是=0.5%。对于地理位置要求严格的需求,要进行一些场景测试,测试是否能满足需求。

2.1写地理信息

那么如何实现目标单位半径内的所有元素呢?我们可以将所有位置的经纬度转换成52位的geohash,通过上表中的geoadd写入redis。

命令格式:

geoadd关键经度纬度成员[经度纬度成员…]

相应的例子:

redis geo add cities : locs 117.12 39.08天津114.29 38.02石家庄

(整数)2

意思是在key.个城市的sorted set集合中添加经度为117.12、纬度为39.08的天津和经度为114.29、纬度为38.02的石家庄,您可以添加一个或多个位置。然后我们可以使用其他命令来计算地理位置。

有效经度范围从-180度到180度。有效纬度范围从-85.05112878度到85.0512778度。当坐标位置超过上述指定范围时,该命令将返回一个错误。

2.2统计单位半径内的面积

借助georadius,我们可以找到给定经纬度的某个半径内的所有元素。

命令格式:

地理坐标长纬度半径m | km | ft | mi[withourd][withdist][with ash][count][asc | desc]

这个命令比geoadd更复杂:

radius半径长度,必需。以下m、km、ft和mi是长度单位选项,四选一。

withcoord返回位置元素的经度和维度,这是可选的。

withdist返回位置元素和中心点以及位置元素之间的距离。距离的单位与查询单位相同,这不是必需的。

withhash以52位精度返回位置的geohash值,这是可选的。反正我很少用这个。也许其他一些偏向底层的lbs应用服务需要这个。

count返回合格位置元素的数量,这不是必需的。比如返回前10名,这样可以避免过多的一致结果带来的性能问题。

asc|desc排序方式,非必选。默认情况下返回未排序,但是大多数我们需要进行排序。参照中心位置,从近到远使用asc,从远到近使用desc。

例如,我们在城市:locs中查找以(115.03,38.44)为中心,方圆200公里的城市,结果包含城市名称、对应的坐标和距离中心点的距离(公里),并按照从近到远排列。命令如下:

redis georadius city : locas 115.03 38.44 200km,带coord witist asc

1) 1)《石家庄》

2) "79.7653"

3) 1) "114.29000169038772583"

2) "38.01999994251037407"

2) 1)"天津"

2) "186.6937"

3) 1) "117.02000230550765991"

2) "39.0800000535766543"

你可以加上计数一来查找最近的一个位置。

3.基于redis geo实战

大致的原理思路说完了,接下来就是实操了。结合spring boot应用我们应该如何做?

3.1 开发环境

需要具有geo特性的redis版本,这里我使用的是redis 4。另外我们客户端使用spring-boot-starter-data-redis。这里我们会使用到使用对象。

3.2 批量添加位置信息

第一步,我们需要将位置数据初始化到redis中。在spring data redis中一个位置坐标(液化天然气,lat)可以封装到org。spring框架。数据。geo。要点对象中。然后指定一个名称,就组成了一个位置geo信息redistemplate。提供了批量添加位置信息的方法。我们可以将章节2.1中的添加命令转换为下面的代码:

mapstring,point points=new hashmap();

points.put("天津",new point(117.12,39.08));

points.put("石家庄",新点(114.29,38.02));

//redistemplate批量添加长狭潮道

redis模板。边界城市:个位置.添加(分);

可以结合弹簧靴提供的applicationrunner接口来实现初始化,建议从mysql等数据库同步地理信息。

@豆

public applicationrunner cache activeapprunner(redistemplate string,string redistemplate) {

返回参数- {

最终字符串geo _ key=" cities:locs

//清理缓存

redistemplate。删除(geo _ key);

//建议从关系型数据库同步地理信息

mapstring,point points=new hashmap();

points.put("天津",new point(117.12,39.08));

points.put("石家庄",新点(114.29,38.02));

//redistemplate批量添加地理定位

boundgeooperationsstring,string geoops=redistemplate。boundgeoops(geo _ key);

geoops.add(点);

};

}

3.3 查询附近的特定位置

使用针对georadius命令也有封装:

地理位置半径(k键,内圆,地理坐标标准参数)

圆对象是封装覆盖的面积(图1),需要的要素为中心点坐标要点对象、半径(半径)、计量单位(公制),例如:

点点=新点(115.03,38.44);

公制公制=redisgeocommands .距离单位。kumts

距离距离=新距离(200,公制);

圆圆=新圆(点,距离);

地理标准用来封装georadius的一些可选命令参数,参见章节2.2中的带门、计数、asc等,例如我们需要在返回结果中包含坐标、中心距离、由近到远排序的前5条数据:

redisgeocommands .地理社区标准参数=地理社区。地理标准。newgeoradiusargs()。includedistance()。包括坐标()。排序排序()。极限(限制);

然后执行半径方法就会拿到georesultsredisgeocommands .地理位置字符串封装的结果,我们对这个可迭代对象进行解析就可以拿到我们想要的数据:

georesultsredisgeocommands .geolocationstring radius=redis template。opsforgeo()。半径(geo_stage,圆,args);

if (radius!=) {

list staged to staged tos=new arraylist();

半径。foreach(地理定位地理结果-->

重新调用命令地理位置字符串内容=地理位置

georesult . getcontent();

//成员姓名如天津

string name=content . getname();

//对应的经纬度坐标

point pos=content . getpoint();

//到中心点的距离

distance dis=geolocationgeoresult . getdistance();

});

}

3.4删除元素

有时我们可能需要删除位置元素,但是redis的geo没有删除成员的命令。但是因为它的底层是zset,我们可以借助zrem命令删除,对应的java代码是:

redistemplate . boundsetops(geo _ stage)。移除(“天津”);

4.摘要

今天,我们使用redis"sgeo功能来实现附近常见的地理信息查询需求,简单易用。事实上,nosql,的另一个mongodb数据库,也可以使用。在数据量较小的情况下,redis能够很好地满足需求。如果数据量大,可以用mongodb.来实现,本文涉及的demo可以通过文末相关文章的链接来获得。

搜索附近的人代码(搜索附近的人神器)

扩展阅读

中国十大搜索引擎排名(手机搜索引擎十大排行)

最近有网友问小编一个有趣的问题:2018年百度、360、搜狗、神马的搜索份额是多少?自谷歌搜索退出中国以来,百度一直是国内搜索引擎的绝对领导者,牢牢占据中国搜索引擎市场份额的第一位。由于比例相对固定,小编近年来很少关注国内各大搜索引擎的份额。今天,自从网友们问起这件事,小编突然感兴趣了。查询了一些资料,大致了解了2018年国内各大搜索引擎排名情况,仅供参考。

2018中国搜索引擎排名

目前,中国搜索引擎公司主要包括百度、360搜索、神马搜索、搜狗搜索等。而谷歌(香港)和微软必应是在华运营的主要外企,其他的市场份额很小,基本可以忽略。另外,现在的搜索引擎分为pc(电脑)端和手机(手机)端,在下面的文章中分别列出。最后附上综合搜索引擎排名。

2018年pc端搜索引擎市场份额排名:

百度:58.67%;

360搜索:25.88%;

谷歌:5.26%;

搜狗搜索4.42%;

冰:4.28% …

由于神马搜索只在移动端工作,在pc端没有份额。

2018年移动搜索引擎市场份额排名:

百度:78.05%;

神马:14.61%;

搜狗搜索:4.47%;

360搜索:1.60%;

谷歌:0.70% …

2018中国搜索引擎集成(pc手机)市场份额排名:

百度:73.02%;

神马搜索:10.90%;

360搜索:7.90%;

搜狗:4.46%;

谷歌:1.89%;

冰冰:1.37%;

其他:0.46%

截至3月底,以上2018中文搜索引擎排名仅供参考。过去的数据不代表未来的数据。但是搜索引擎在中国的份额是比较固定的,波动比较小。

从数据上看,百度是中文搜索引擎的绝对大哥。pc和移动都远远领先于其他搜索引擎,占比超过73%,移动更是高达78%。自从谷歌退出中国市场后,大部分搜索引擎份额都转移到了百度,几乎垄断了国内搜索引擎市场。

百度(全球最大的中文搜索引擎)

值得一提的是,360搜索虽然在pc市场占有近25%的市场份额,但移动搜索份额却非常尴尬,极低,远不如百度。即使与神马、搜索、谷歌相比,也有明显差距。移动终端缺点明显,综合占有率不到8%。这个成绩还不如神马的综合成绩。

360搜索

神马搜索是移动端的第二代搜索引擎,市场份额在14%左右。但是没有pc,综合占比10.9%,不高。

在搜狗,pc和移动终端的份额相对比较均衡,但份额不高,总体来说还是比较满意的。谷歌搜索曾经占中国市场的30%-40%。但由于退出中国大陆市场,目前只有香港提供服务,mainland china很多地区被封锁,交通不便,所以中国的市场份额相对较低。

2018年全球搜索引擎排名

最后补充一句,虽然百度是中文搜索的绝对领头羊,但在全球搜索引擎市场,百度的份额只有1.50%左右,全球市场份额很低,谷歌高达91.25%,是全球搜索引擎的绝对领头羊。必应位居第二,全球市场份额约为3.06%。

为什么谷歌能全收录,百度搜狗等国产搜索引擎却收录很难

有没有发现一个奇怪的现象?国内的搜索引擎对于一个网站的收录总是有门槛的。不是说你的网站好看,内容足够好,质量高,而是google不一样。只要内容差不多,收录不是问题。

国内搜索引擎收录问题

现在做seo优化最麻烦的就是解决收录问题。对于国内搜索引擎来说,解决收录问题的第一步自然是网站的备案。现在没有备案的网站,搜狗和360基本都不收录,百度也慢慢缩小了未注册网站的收录范围,所以要想收录好,得先备案。

内容质量问题

百度说他们不收录这个老话题的原因是你的内容质量不高,原创性不够,不能满足用户的需求.其实这些都有点扯淡。我们做了一些实验,即使是原封不动的复制或者复制粘贴,两个网站几秒钟就能收到,而第一个网站几个月就能收到,甚至根本收不到。

所以官方说法只能相信高达80%,这是算法的缺陷造成的。说国内搜索引擎不区别对待域名和备案主体是不可能的。个人不能把一个小程序备案的问题,就足够说明了。即使有些网站的内容都是原创的,也只是稀疏地收录了几条。如果您将内容复制到其他网站,您将在几秒钟内收到。所以如果收录不好,就改域名,直到收录正常。虽然成本有点高,但是要想办法走优化之路。

对于搜狗和360来说,被包括在内需要一点运气。就算是备案的网站,不管你怎么提交,人家就是无视。他们希望内容可能更倾向于多年的老域名。新域名真的有可能被收录。你太优秀了。

吐槽为什么国内搜索引擎一直被骂

第一,搜索技术不好

你真的不相信。百度是当之无愧的中文搜索领头羊,但是从来没有人夸过它有多好。最大的缺陷就是找不到自己想要的。

也许你找普通的东西没有问题,但是对于一些稍微专业一点的东西,你真的找不到,这也是为什么经常发现程序员总想用谷歌配梯子的原因。百度的很多关卡不包括在内。其实我们都在寻求百度的包容。被收录算烧高香,没有排名的讨论。

先说排名:百度的排名算法虽然升级升级了,但好像还没出名字。现在是不好的体验。搜索一个关键词,趋向于只能找到一个结果,不相信自己看到的:

其实都是互相抄袭的。答案真的只有一个。重要的是这篇文章解决不了问题。代码只实现了展现风格,功能不正确。数字并不是随着页面浏览量的增加而变化的。也就是说,搜索到的答案都是一样的。你想要另一个解决方案,但你真的找不到。我不知道他们把这种重复上千遍的东西包括进去有什么用。排序算法是在相同结果后升级还是回归?对于搜狗和360等其他搜索引擎来说,这更是无稽之谈。你更难真正找到满足自己需求的答案。

第二,缺乏包容性和可扩展性

所谓宽容,就是他技术不好,不会包含某一类网站(合法)。比如域名比较老的话,会相对容易收录,新域名就比较难;企业记录相对容易,个人不想记录。比如百度算法就老多了,还有相当多的雷,绿萝卜,冰桶等等。但这些都是反对seo优化的算法。可能是他们的算法工程师排除了真正有用的,算法有bug。

比如:唐诗三百首,李白的作品从李白写起就是一个不变的内容。那么百度在对付他们的时候会怎么选择呢?先收录已有网站,但后来诞生的网站是否成为抄袭而不收录?真的是!我看过一个视频,他们的回答是算法中的时间因子是——,但是这个东西有什么用?你会发现搜索古诗词,找到很多几千年没更新的网站,页面难看,用户体验差,连手机版都没有。但是新域名的新网站是没有机会被收录的,因为你做的内容与百度数据库中已有的内容重复,有抄袭嫌疑。

如此恶性循环的结果是,用户很难找到真正好的东西。那些企业备案的所谓可信网站不更新,而是在搜索结果中优先显示。它们有什么用?所谓的反作弊算法可能真的有bug,把真正好的东西排除在外,但是有些糟粕就当珍宝了。

缺乏扩展性:无法用算法排除真正好的和不好的内容。现在简单粗暴的方法就是干脆不收录,而是手动审核域名(比如搜狗),这样只要是他们认为质量高的网站就会收录,不收录就懒得收录。但问题来了。你不能用算法过滤,所以他们根本不包含很多网站的内容。如果不包含,搜索结果中就不会显示更好的内容,然后用户就找不到自己需要的,然后就会被骂。

为什么谷歌不能被纳入其中

做google seo优化可能会有一种感觉:你真的要做好内容、优化页面等方面的工作。只要你真的是金子,你就会发光发亮,出人头地。如果你是镜像站,直接抄袭或者复制,即使被收录,也很难有排名的机会,提醒优化和网站建设者。如果你的网站真的很垃圾,那就不能有收录和排名。

不是说唱。国内搜索引擎做不到,但你真的做不到。seo优化潜规则:虽然百度、360等各大搜索引擎都创建了站长平台,但是你可以提交你的网站,而且都是提倡网站seo优化的。事实上?幕后,我不希望你优化的太好,因为他们的算法并不能真正解决优化作弊,过度优化或者识别真正优化的真正优质的内容,往往会导致吹错。也有一些词不允许你通过优化获得排名靠前。这只是隐藏。大家都知道你是通过优化领先的,那么谁来做竞价呢?所以,我们都知道。

当然,包括百度在内的搜索引擎一直在澄清排名没有人工干预,但这种解释越让人觉得是人工干预。对于商站来说,竞价是必不可少的推广渠道之一,优化只是额外的推广渠道。但是对于站长来说,优化其中一个渠道来提高流量来源,而搜索引擎收录网站页面是为了给用户提供更好的结果,这是一个双赢的局面。但是,总有刁民想害我。搜索引擎看起来像违规网站,大家都在想:不要出价,天天seo优化,seo优化,seo优化,不包括你,或者包括只是一些没用的东西,看你怎么做.

淘宝客户列表怎么拉入群?淘宝怎样搜索群聊号

对于淘宝商家来说,维护老客户,吸引新客户是非常重要的。许多商家会创建几个群组,邀请客户加入群组,并在群组中推送商店消息。如何把淘宝客户名单拉进群里?

如何加入淘宝群聊?

商家建立淘宝群时,用户如何加入淘宝群聊天?以下是一些邀请用户加入淘宝群聊的方法。

一、操作步骤

1.建群的时候一定要设置门槛:必须设置入群门槛,平台会做基础防控,商家要定制入群门槛。

2.获取自己的淘宝群链接:打开电脑-点击设置-复制群链接

3.群链接带群二维码:建议长期使用群链接。集团二维码有30天的时效性。用户需要用手机淘宝扫码入群。

4.在淘添加群条目:店铺首页、宝贝详情页面、旺旺底部自动回复、微淘、直播等。

第二,用户进入群组的门槛

有两种类型的用户进入群,即:商户自定义阈值和平台基础防控

1.商家定义的阈值

1)类型:无条件,注意入团,满足一定消费金额,密码入团;

2)设定:小组成员有上限。建议设置群组阈值,筛选有贡献能力的用户,细化操作。

2.平台基础入团防控

a、加入群的成员必须进行实名认证,没有实名认证就不能加入群。

b、除群主管理员外,淘气值在401以下的用户不能加入群。

c、全网黑名单用户,无法加入群。

d.被商家自己黑掉的用户不能进群。

e、用户被多家店铺拉为黑名单用户,用户成为全网黑名单用户。

f、邀请方邀请用户成为黑名单用户,数量超过一定数量,邀请方拉入全网黑名单用户。

g.商户账户可以创建一个群,成为自己店铺群的群主;但不能成为其他店铺的群成员,即买家已经开店,不能加入群。

其实从淘宝客户名单拉人入团的步骤还是挺简单的。商家首先要创建一个群,然后找到客户列表,邀请他们加入群。或者向组中添加成员。

猜你喜欢

反馈