【Open Search产品评测】- 来往,7天轻松定制属于自己的搜索引擎
【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://weibo.com/1644971875/Bj0XQhN28?mod=weibotime&type=repost#_rnd1408437347760
【Open Search产品评测】- 来往,7天轻松定制属于自己的搜索引擎的更多相关文章
- 【Open Search产品评测】-- 淘点点:基于OpenSearch,轻松实现一整套O2O类搜索解决方案
[Open Search产品评测]-- 淘点点:基于OpenSearch,轻松实现一整套O2O类搜索解决方案 [使用背景] 我们淘点点团队应该可以算是内网首批使用opensearch来搭建应用 ...
- 【阿里云产品评测】小站长眼中的巅峰云PK
[阿里云产品评测]小站长眼中的巅峰云PK 阿里云论坛用户:昵称-a5lianmeng 笔者是一名小站长,因狂热互联网,而在毕业后由宅男逐渐进入站长队伍,在毕业后的几年间,经营6个流量类网站,身为站长, ...
- OCR-Form-Tools项目试玩记录(二)产品评测
这是一篇软工课程作业博客 项目 内容 这个作业属于哪个课程 北航2020春软件工程 006班(罗杰.任健 周五) 这个作业的要求在哪里 个人博客作业-软件案例分析 个人课程目标 系统地学习软件工程理论 ...
- 神奇的 ViewDragHelper,让你轻松定制拥有拖拽能力的 ViewGroup
为了吸引大家的注意力,先给大家看一张动图: 相信这种效果大家都见过吧?我第一次见到这样的效果时,心里也痒痒的,急于想实现这种功能,后来因为拖延症的问题,就一直没有去弄这件事.现在这段时间,工作比较轻闲 ...
- 使用JMeter的Java Sampler轻松定制自己的benchmark
做性能测试,接口测试,非常好 转自 http://www.iteye.com/topic/1123432 以前碰到更多的是WEB APP的性能测试,也许用得最多的是Loadrunner, Web S ...
- Scrapy 轻松定制网络爬虫(转)
网络爬虫(Web Crawler, Spider)就是一个在网络上乱爬的机器人.当然它通常并不是一个实体的机器人,因为网络本身也是虚拟的东西,所以这个“机器人”其实也就是一段程序,并且它也不是乱爬,而 ...
- .NET中使用DebuggerDisplay轻松定制调试
前言 对于调试的方式有多种,不过在今天我们将看到的监视窗口对变量的监视,当然在这里我们是定制内部的变量值,或者说变量的显示与计算的内容. 注:监视窗口在调试时可以一次显示多个变量."快速监视 ...
- 【¥200代金券、iPad等您来拿】 阿里云9大产品免费公测#10月9日-11月6日#
#10.09-11.06#200元代金券.iPad大奖, 9大产品评测活动! 亲爱的阿里云小伙伴们: 云产品的多样性(更多的云产品)也是让用户深度使用云计算的关键.今年阿里云产品线越来越丰富,小云搜罗 ...
- 产品开发也要看阵容,APP开发只需五步变得靠谱
最早认识的一个朋友是程序员,曾经到一家外包公司接单子,小外包公司经常遇到的问题就是和需求方谈产品功能.客户要做外包,对方让他一次性报价,但是客户连功能点自己都不清楚,这时朋友说还是按照具体功能点来做吧 ...
随机推荐
- 操作失败,没有该服务权限![ 机构号:99 ,用户ID:50000009 ,服务号:0101030112 ]
操作失败,没有该服务权限![ 机构号:99 ,用户ID:50000009 ,服务号:0101030112 ] 此时我们可以把代码 SERVICE_NO 改成 10个0 即 0000000000 ,就可 ...
- mysql创建用户两次授权
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' -> IDENTIFIED BY 'some_pass' ...
- poj 3264 Balanced Lineup(RMQ裸题)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 43168 Accepted: 20276 ...
- POJ 1947 Rebuilding Roads (树dp + 背包思想)
题目链接:http://poj.org/problem?id=1947 一共有n个节点,要求减去最少的边,行号剩下p个节点.问你去掉的最少边数. dp[u][j]表示u为子树根,且得到j个节点最少减去 ...
- ajax提交后台自动反序列化成对象
下面是ajax提交的方法,主要用到了$form.serializeArray()将表单序列化成json对象,然后用each处理一下,代码如下: var $form = $('<form>& ...
- [Java线程] Java线程池ExecutorService
示例 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.u ...
- Ehcache(04)——设置缓存的大小
http://haohaoxuexi.iteye.com/blog/2116749 设置缓存的大小 目录 1 CacheManager级别 2 Cache级别 3 大小衡量 4 ...
- Delphi Data Type to C# Data Type
Delphi DataType C# datatype ansistring string boolean bool byte byte char char comp double currency ...
- JQUERY插件JqueryAjaxFileUplaoder----更简单的异步文件上传
异步上传相信大家都做过类似的功能,JqueryAjaxFileUploader为我们提供了更简单的实现和使用方式.不过既然是JQUERY的插件那么它所依赖的环境大家都懂得.JqueryAjaxFile ...
- INDY idhttp Post用法
http://www.cnblogs.com/tk-del/archive/2013/05/10/3071541.html function Post(AURL: string; ASource: T ...