【Open Search产品评测】--

  来往,7天轻松定制属于自己的搜索引擎

 

[使用背景]

相信很多人都遇到过要给网站或者app做一个搜索功能的需求,很久之前自己折腾过lucene,搞了很久,要自己搞中文分词(比如用中科院的那个)重写tokenizer,自己建索引,做实时更新流程,数据量大了还要考虑怎样给数据分环等等各种问题。从2014年初开始接触opensearch,当时来往要做扎堆搜索(包括搜扎堆,搜帖子,搜某个堆内的帖子,搜堆内成员等)从上手到熟练使用opensearch只用了大概不到1周的时间,总体来说非常满意。感觉这个东西非常符合互联网创业的节奏,简单方便,很快的就能实现自己的搜索接口。

[使用过程]

以建立一个来往的扎堆搜索为例(如果不知道扎堆是啥,就理解成类似于百度贴吧的东西),比如搜赵薇,我们能找到赵薇相关的扎堆。我来简单讲述一下怎样迅速的用opensearch搭建一个搜索接口。

1. 注册opensearch的账号,按操作来就好了。

2. 创建一个应用,定义索引结构。例如:

这里面可搜索,可以理解成需要建索引的字段,比如扎堆的名字,扎堆的pinyin名字,扎堆的标签等。可聚合我这目前没有使用,先不管这个。可过滤,比如某个字段(checkin_type)表示有的扎堆是私密的,有的不是,那么需要把checkin_type勾选成可过滤,这样在检索的时候可以写语句来选取保留哪些符合条件的搜索结果。可展示表示,搜索接口出来我们要给client显示哪些字段。

3. 数据导入,opensearch提供了3种数据导入的方式可以根据应用需要自己选择。比如从mysql导入,都是图形化的界面,需要做的只是将mysql中的字段和刚才建立的索引结构的字段对应起来。也可以通过hdfs,和sdk还有http的api把数据push过来,sdk和http的api方式非常灵活,具体做法可以参考帮助文档讲的很清楚。[注:mysql\hdfs只有内网支持]

 

4. 建立索引,在界面里点击数据导入这个tab,会有索引重建这块,点击现在重建,opensearch会从刚才我们配置的数据库里,按照配置的字段对应方式,从数据库里读出数据并建立索引。等待这个过程结束,就可以访问搜索接口了。

5. 访问搜索接口,在应用首页的右上角点搜索测试。

如图中有http的接口,访问后返回的是json格式的搜索结果数据。这样最简单的一个搜索雏形就这样搭建出来了。

[使用技巧]

下边说一些可能会遇到的需求和问题:

1. 比如遇到排序需求,例如需要A字段命中比B字段的命中要更重要,即A字段匹配的好的要排在前面(比如title和content)。这样可以自定义排序公式,可以参考文档这里给了很多排序函数,比如可以用bm25算法算静态分,text_relevance算和某个字段的匹配程度,fieldterm_proximity计算匹配的密度,也有按时间字段衰减的函数。

2. 比如遇到一些召回方面的需求,例如搜zhoujielun希望可以搜出周杰伦,搜明星可以出所有明星相关的文档(并不一定包含明星两个字),可能通常比较大的搜索引擎通过query refine和query correct这种类似的模块来分析query来扩大召回,这里可以稍微投机一下,我们把确定的希望召回的term可以做成一个新的字段放到索引结构里,并给这些字段一个排序的权重来做到召回并可以合适的排序。

3. 比如遇到搜索附近的事物的需求,排序函数里提供了一个distance函数,是算球面距离的,这个方法是o(n)的,如果数据多了,可能效率会有影响。我们可以在索引结构里做一个字段,用geohash算法(此算法参考http://en.wikipedia.org/wiki/Geohash)将query里的二维坐标变成一些前缀相同的字符串(比如我们可以固定留5,6,7,8位的),把这些geohash后的字符串放到这个新的索引字段里。检索的时候也同样把输入的二维坐标算出5,6,7,8位的geohash串,在这些串能索引到的数据里用distance函数进行更精准的距离计算并排序,可以很高效的完成附近的事物的搜索。

4. 另外数据量这块,目前数据量最大的索引约有5000w个doc,这个状况下在qps500的时候依然可以做到10ms以内返回搜索结果(当然搜索结果的每个doc的可展示字段不要太大,这样响应时间会因为网络传输数据变的慢一些)。

[需求]

1. 还有发现一些查询的badcase,在query分析和结果的求交求并这块还是有些badcase的,例如假如我们搜 "周杰伦中学照片",按照重要程度感觉上是周杰伦>>中学=照片,即使没有全命中的文章,那么也应该召回周杰伦照片或者 周杰伦的文档。相信这块会越做越好的。

OpenSearch解答:目前正在开发一个新功能,会对用户query做多个维度的改写,比如低权重term降权,支持用户自定义词典(同义词、纠错、停用词、专业词等),会进一步提升长尾词的搜索效果,降低无结果率。

2. 如果能提供相关搜索功能就更好了:). 比如根据这个搜索应用经常搜的一些query的log,给出搜这个query的用户还可能搜什么词儿。

OpenSearch解答:相关搜索、下拉提示等功能都已经在规划中,包括后续的点击反馈、个性化搜索我们都已经开始调研工作了,敬请期待。

[总结]

总之,opensearch帮助使用者解决了搜索功能上很多很多的问题,使得我们在短时间内就可以很容易的按照自己产品的需求定制出自己的搜索引擎。

来往:http://www.laiwang.com/

原文:http://weibo.com/1644971875/Bj0XQhN28?mod=weibotime&type=repost#_rnd1408437347760

转载于:https://www.cnblogs.com/aliyunblogs/p/3922563.html

【Open Search产品评测】- 来往,7天轻松定制属于自己的搜索引擎相关推荐

  1. 【Open Search产品评测】-- 淘点点:基于OpenSearch,轻松实现一整套O2O类

    2019独角兽企业重金招聘Python工程师标准>>>  [Open Search产品评测]--  淘点点:基于OpenSearch,轻松实现一整套O2O类搜索解决方案   [使用背 ...

  2. 【Open Search产品评测】-- 淘点点:基于OpenSearch,轻松实现一整套O2O类搜索解决方案...

     [Open Search产品评测]--  淘点点:基于OpenSearch,轻松实现一整套O2O类搜索解决方案   [使用背景] 我们淘点点团队应该可以算是内网首批使用opensearch来搭建应用 ...

  3. 【阿里云产品评测】小鸡咕咕的初体验

    小编: 以一个新手的角度分析了云服务器 ECS.关系型数据库 RDS.开放存储服务 OSS.内容分发网络 CDN.云引擎 ACE的种种...配以大量过程截图,非常通俗易懂.最后,不禁感慨"如 ...

  4. 【实用的开源项目】使用服务器部署Whiteboard,一个轻量级、可轻松定制的协作白板

    1. 前言 平时小俊白板用的挺多的,前两天在学校就想着有没有一个轻量化的在线白板(?于是小俊搜寻了一番,还真找到一个名字叫 Whiteboard 的基于 MIT 许可开源的一个项目,安装体验一番之后, ...

  5. shopify 二次开发 如何创建定制产品,如何让用户写入定制内容

    本人 兼职 shopify.店匠二次开发.仿站.定制等开发服务,有需要的可以加我微信 abc939039210,备注 shopify 什么是定制产品 定制产品,顾名思义,就是客户定制具有自己特色的产品 ...

  6. 网页版女朋友表白告白代码,可轻松定制表白内容、认识时间等,html爱心表白代码

    网页版女朋友表白告白代码,可轻松定制表白内容.认识时间等,html爱心表白代码 运行效果 这里,定制要修改的地方主要有: 1.时间:请修改love.html,第188行,setfullyear设置年月 ...

  7. 昕友亿方InfoPath智能平台软件视频教程公开,4分钟学会轻松定制企业级应用软件

    昕友亿方InfoPath智能平台软件视频教程公开,4分钟学会轻松定制企业级应用软件,如CRM,OA,ERP,EIP,MRP等 在线动画演示地址: http://starcrm.cn/demo1.htm ...

  8. KendoReact R2 2022轻松定制的主题生成器工具

    KendoReact R2 2022轻松定制的主题生成器工具 KendoReact 是一个专业的 UI 工具包,可以更快地构建和设计应用程序.全面的 React 组件库有 100 多个完全可访问和可定 ...

  9. 黄聪:Scrapy 轻松定制网络爬虫

    黄聪:Scrapy 轻松定制网络爬虫 网络爬虫(Web Crawler, Spider)就是一个在网络上乱爬的机器人.当然它通常并不是一个实体的机器人,因为网络本身也是虚拟的东西,所以这个" ...

最新文章

  1. [Usaco2005 Open]Disease Manangement 疾病管理 BZOJ1688
  2. 想要求职Web安全相关的岗位,你就必须要懂的知识
  3. java date.getyear_为什么Java的Date.getYear()返回111而不是2011?
  4. 上传文件漏洞案例分析
  5. Linux 运维必备150 个命令,值得收藏!
  6. 在elementUI中使用 el-autocomplete 实现远程搜索的下拉框
  7. [原创]linux简单之美(三)
  8. host地址切换工具-SwitchHosts
  9. 小米动态图标+android实现,创新设计动态图标
  10. 彩色图像--色彩空间 CMY(K)空间
  11. 晨星封闭式基金9月21日业绩排行榜
  12. python实现大数定理
  13. JavaScript实现经典消方块游戏
  14. 玩乐|杭州夏季纳凉好去处
  15. 苹果全球开发者大会将于6 月5日开幕
  16. android TextView 分散对齐(两端对齐)
  17. 智能机器人为什么连接不上服务器,战争机器人无法连接服务器是什么原因
  18. 由内建质量到持续集成
  19. Android微信界面
  20. Oledcomm——全球5G/LiFi技术领航者

热门文章

  1. 配置透明网桥实现QinQ传输案例
  2. 记 Arthas 实现一次 CPU 排查与代码热更新
  3. 字符串反转python_Python 反转字符串(reverse)的方法小结
  4. mongodb php 报错,PHP5 mongodb 切换db报错 Authentication failed on database admin-汗血宝马
  5. sql server schema下拉不到存储过程_mysql数据库字符编码总结--数据存储编码
  6. python写程序求多项式的和_用正则编译和搜索在python中计算区分多项式的系数
  7. 同名字的数值求和插入行_中望CAD2021:支持表格和字段插入公式,提高数据处理效率...
  8. NBA表格_多伦多猛龙,向NBA大结局说不!猛龙夺冠创下了哪些记录?
  9. python外星人入侵飞船上下移动_python外星人入侵游戏左移正常,右移屏幕上不显示,但实际上已经移动了?...
  10. 深度学习:背景建模高斯混合模型