阿里云开放云搜索初探
原文转自:http://yhzhtk.info/2013/07/02/1-aliyun-opensearch.html
前几天申请了阿里云开放云搜索(Aliyun OpenSearch)的邀请码,今早通过收到通过验证了,于是准备试试云搜索。
阿里云搜索使用很简单,和Lucene一样,包括索引文档字段几个概念。每个索引可以当成数据库的一个数据库,一条文档当成数据库的一条记录,一个字段就是数据库的一个字段。
目前支持四种形式的搜索模板,资讯类,小说类,应用类和社区类。模板在这儿就是规定好了索引的字段,也可以自定义。详细介绍
我想测试一下,就把自己的博客写的这十几篇POST发上去建立索引吧,使用了资讯类的模板。
模板字段如下:
字段名 | 类型 | 字段说明 | 独立检索 | 可检索 | 可排序 | 可筛选 |
id | STRING | 文档标识(必选) | 是 | |||
title | TEXT | 资讯标题 | 是 | 是 | ||
body | TEXT | 资讯内容 | 是 | |||
type_id | UINT16 | 类型,如财经 | 是 | |||
cat_id | UINT16 | 组别,支持多个,如"cat_id":[12, 13]、"cat_id":["12", "13"],具体请参加模版数据类型说明 | 是 | |||
url | STRING | 展示url | ||||
author | TEXT | 作者 | 是 | 是 | ||
thumbnail | STRING | 缩略图 | ||||
source | TEXT | 新闻来源 | 是 | |||
create_timestamp | UINT32 | 创建时间 | 是 | 是 | ||
update_timestamp | UINT32 | 更新时间 | 是 | 是 | ||
hit_num | UINT32 | 点击数 | 是 | 是 | ||
focus_count | UINT32 | 关注数 | 是 | 是 | ||
grade | UINT32 | 读者评分 | 是 | 是 | ||
comment_count | UINT32 | 评论数 | 是 | 是 | ||
boost | INT8 | 站长自定义加分项 | 是 | 是 | ||
integer_1 | UINT32 | 保留字段,站长自定义 | 是 | 是 | ||
integer_2 | UINT32 | 保留字段,站长自定义 | 是 | 是 | ||
integer_3 | UINT32 | 保留字段,站长自定义 | 是 | 是 | ||
tag | TAG | 标签 | 是 | |||
display_text | STRING | 站长自定义展示字段 |
提供的需要上传的JSON格式示例:
[{"fields": {"body": "广大中小企业都有各种结构化的数据需要进行检索,目前一般采用数据库本身提供的搜索功能或者利用open source的搜索软件搭建", "display_text": "open search", "hit_num": "88888", "update_timestamp": "1345448016", "type_id": "1", "url": "http://www.aliyun.com", "cat_id": [1,2], "author": "阿里云", "grade": "10", "comment_count": "1234", "tag": {"搜索":10,"阿里云":2,"云搜索":5,"开放搜索":8}, "source": "阿里云云搜索", "focus_count": "8888", "title": "阿里云隆重推出开放搜索", "boost": "1", "id": "id_1", "integer_1": "100", "create_timestamp": "1345448016"}, "cmd": "ADD"}, ... ]
其中很多字段用不上,可以忽略。我的博客都是在jekyll中的post类型,需要把所有的post转为JSON格式。我写了一个Python,来处理_post文件夹下面的所有文章,最后导出Json
#coding=utf-8
'''
将jekyll中_post目录下的文章到处json格式,用于阿里云搜索
@author: gudaihui
'''import os
import re
import json
import timedef object2dict(obj):'''使用内置json转换时,需要将对象转为dict'''#convert object to a dictd = {}d.update(obj.__dict__)return dclass PostInfo():'''存储一条博客的所有字段类'''def __init__(self, title, tags, content, rooturl, f):self.title = titleself.tag = {}#标签有一个权重,默认都为1for t in tags.split(","):self.tag[t.strip()] = 1self.body = contentself.id = f.replace("-", "").replace(".html", "")self.display_text = "open search"self.hit_num = "88888"#处理日期和URLt = re.match('\\d{4}-\\d{2}-\\d{2}', f).group()self.url = rooturl + f.replace(t + "-", (t + "-").replace("-", "/"))self.update_timestamp = "%d" % time.mktime(time.strptime(t,'%Y-%m-%d'))self.create_timestamp = "%d" % time.mktime(time.strptime(t,'%Y-%m-%d'))self.type_id = "1"self.cat_id= [1,2]self.author="yhzhtk"self.grade="10"self.source="yhzhtk"self.boost = "1"def getPostInfo(path, rooturl="http://yhzhtk.info/"):'''从文件中读取所有的POST返回PostInfo信息'''os.chdir(path)posts = [[open(f, "r").read(), f]for f in os.listdir(path) if f.endswith(".html")]pattern = re.compile(r"---\nlayout: post\ntitle: ([^\n]*)\ntags: \[([^\]]*)\]\n---\n(.*)", re.DOTALL)infos = []for post, f in posts:match = pattern.match(post)if match:title = match.group(1)tags = match.group(2)content = match.group(3)content = re.sub("<[^>]*>","",content)content = re.sub("{%[^%]*%}","",content)content = content.replace("\n", "")infos.append(PostInfo(title, tags, content, rooturl, f))return infosdef genPostJson(infos):'''将PostInfo处理得到最后的Json'''jsonstr = ""for info in infos:temp = json.dumps(info, ensure_ascii=False, default=object2dict)temp = '''{"fields":''' + temp + ''', "cmd": "ADD"}'''jsonstr += "," + tempif json:jsonstr = jsonstr[1:]jsonstr = "[" + jsonstr + "]"print jsonstrif __name__ == '__main__':'''开始执行'''path = r"C:\Documents and Settings\yicha\blog\_posts"infos = getPostInfo(path)genPostJson(infos);
所有的json是直接输出了,也可以输出到一个文件中。然后将文件上传到刚才新建的索引中。刷新,看到文档条数不为0,就可以点击搜索测试了,如果数量仍为0,可以查看错误日志,里面写明了错误的文档和错误原因。最后,可以通过给的API把搜索功能添加到你的产品中。
搜索的效率问题现在还没法知道,因为文档数比较少。等有机会可以应用到实际中测测。
阿里云开放云搜索初探相关推荐
- 一分钟了解阿里云产品:阿里云开放云搜索初探
前阶段申请了阿里云开放云搜索(Aliyun OpenSearch)的邀请码,今早收到通过验证了,于是准备试试云搜索. 阿里云搜索使用很简单,和Lucene一样,包括索引文档字段几个概念.每个索引可以当 ...
- 从市场应用角度上来划分,云可分为文件云、应用云、手机云和开放云
根据云存储的特性,可以在不同的产品上,进行应用.所以从其市场应用角度上来看,产品定位应分为:"文件云"."应用云"."手机云"." ...
- 【初码干货】使用阿里云开放搜索服务快速搭建资源搜索网站
大家好,我又来了,答应云栖论坛一周一篇文章, 由于工作太忙已中断1个多月实在抱歉,这一次写点轻松有趣的东西-快速的做个资源搜索站 依稀记得十来年前,带宽还只有2M的时候,受各个论坛启发,做了可以搜索嘿 ...
- 阿里云开放搜索实践,使用阿里云开放搜索来做网站站内搜索...
阿里云的开放搜索已经做得很完善了,现在阿里云集成了开放搜索,只要定义好表结构,上传数据,就会自动生成索引,马上就可以搜索了,简直可以做个搜索引擎了.一起来看看. 阿里云开放搜索介绍及购买页 首先,创建 ...
- 使用阿里云开放搜索服务快速搭建资源搜索网站
下面我们就一步一步来搭建这个简单的资源搜索网站 一.搭建前的一些准备和分析 资源搜索网站有如下几个关键点: 1.原始数据 没有个几百万条初始搜索数据,都不好意思和别人说是做资源站的,在这个案例里面,我 ...
- 苹果重新设计开源官网;阿里云开放 YoC 源代码;GitHub 开发 Code Search 功能 | 开源日报
整理 | 宋彤彤 责编 | 屠敏 开源吞噬世界的趋势下,借助开源软件,基于开源协议,任何人都可以得到项目的源代码,加以学习.修改,甚至是重新分发.关注「开源日报」,一文速览国内外今日的开源大事件吧! ...
- 关于阿里云的图像搜索的创建和使用
大家好哇,我又来了,这次我们来聊下关于阿里云的图像搜索功能的创建和使用. https://click.aliyun.com/m/1000371702/ 1.我们可以通过上面的链接进入到阿里云云产品免费 ...
- 开个坑, 写个阿里云开放储存服务(OSS)的C++版SDK以及客户端
这应该是继我研究手册QQ协议后的第2个稍微正式一点的网络程序, 不只是Scoket套接字编程, 还涉及到更多的HTTP协议知识! 阿里云开放储存服务OSS官方已经提供了不少SDK, 包括PHP/Pyt ...
- 阿里云开放国内首个云端数据库测试平台,云已成为数据库新标准;华为5G随行WiFi发布;科大讯飞推出 AI 专用语音芯片系列……...
戳蓝字"CSDN云计算"关注我们哦! 嗨,大家好,重磅君带来的[云重磅]特别栏目,如期而至,每周五第一时间为大家带来重磅新闻.把握技术风向标,了解行业应用与实践,就交给我重磅君吧! ...
最新文章
- Redis的字典扩容与ConcurrentHashMap的扩容策略比较
- android json解析及简单例子
- 成功解决raise XGBoostError(_LIB.XGBGetLastError()) xgboost.core.XGBoostError: b'[22:08:00] C:\\Users\\Ad
- CVE-2021-33909:Linux本地权限提升漏洞
- 冬季巧食生姜可提高免疫力
- GDCM:DICOM文件转储ADAC文件的测试程序
- 如何将前端数据保存到文件
- 整型数据类型java_Java 六种基本整型数据类型变量的取值范围
- 平安产险项目记录(二)
- JavaScript中Element与Node的区别,children与childNodes的区别
- VFP9 连接mysql代码示例
- Qt5下载与安装(Windows版)
- 《未来世界的幸存者》摘录
- TCP/IP中MSL详解
- 【openpyxl】插入图表(折线图)
- ArcEngine IProximityOperator踩坑小记
- 最牛训犬师,专治拆家打架咬人,20多年搞定2000多条狗
- 电脑怎么安装excel表格
- 30行代码用python实现软件翻译
- 计算机ps2定义,软件硬件界面接口定义 bt656 硬件接口定义