【Open Search产品评测】-来往,7天轻松定制属于本身的搜索引擎

Open Search产品评测】--php

  来往,7天轻松定制属于本身的搜索引擎html


[使用背景]mysql

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

 

[使用过程]sql

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

1. 注册opensearch的帐号,按操做来就行了。json

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

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


3. 数据导入,opensearch提供了3种数据导入的方式能够根据应用须要本身选择。好比从mysql导入,都是图形化的界面,须要作的只是将mysql中的字段和刚才创建的索引结构的字段对应起来。也能够经过hdfs,和sdk还有http的api把数据push过来,sdk和http的api方式很是灵活,具体作法能够参考帮助文档讲的很清楚[注:mysql\hdfs只有内网支持]app


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 

相关文章
相关标签/搜索