在python中使用elasticsearch做为搜索引擎,,一直想找一个快速全文搜索
在python中使用elasticsearch做为搜索引擎,,一直想找一个快速全文搜索
一直想找一个快速全文搜索的工具,目前找到的有Sphinx,xapian,Lucene,solr,elasticsearch,whoosh,hyperestraier等,原本一直不太喜欢用java系的,内存大户伤不起啊。尝试了sphinx,xapian,hyperestraier,其中xapian资料太少,hyperestraier虽然比较简单,但资料也少。sphinx到是有一个中文化的分支coreseek,然后看到文档里面提到sphinx支持一元切分,但根据查询的例子去查的结果不是我想要的,不知道是不是我的查询语句用错了。而且因为我是在windows上测试的,而我的python又是2.7的版本,无法在coreseek上直接使用,应该需要重新编译。后来看到elasticsearch,真是亮瞎老夫的狗眼啊,这货直接可以用restfuljson操作又有pyes,pyelasticsearch这些已经封装好的操作库。elasticsearch还是支持分布式,扩展也方便了。由于是java开发的,跨平台也无问题,默认单机尝试的时候无须改配置,直接运行bin/elasticsearch.bat就可以了。 安装pyes
pip install pyes
使用例子
#coding:utf-8import pyesconn = pyes.ES(['127.0.0.1:9200'])#连接esconn.create_index('test-index')#新建一个索引#定义索引存储结构mapping = { u'parsedtext': {'boost': 1.0, 'index': 'analyzed', 'store': 'yes', 'type': u'string', "term_vector" : "with_positions_offsets"}, u'name': {'boost': 1.0, 'index': 'analyzed', 'store': 'yes', 'type': u'string', "term_vector" : "with_positions_offsets"}, u'title': {'boost': 1.0, 'index': 'analyzed', 'store': 'yes', 'type': u'string', "term_vector" : "with_positions_offsets"}, u'position': {'store': 'yes', 'type': u'integer'}, u'uuid': {'boost': 1.0, 'index': 'not_analyzed', 'store': 'yes', 'type': u'string'} }conn.put_mapping("test-type", {'properties':mapping}, ["test-index"])#定义test-typeconn.put_mapping("test-type2", {"_parent" : {"type" : "test-type"}}, ["test-index"])#从test-type继承#插入索引数据#{"name":"Joe Tester", "parsedtext":"Joe Testere nice guy", "uuid":"11111", "position":1}: 文档数据#test-index:索引名称#test-type: 类型#1: id 注:id可以不给,系统会自动生成conn.index({"name":"Joe Tester", "parsedtext":"Joe Testere nice guy", "uuid":"11111", "position":1}, "test-index", "test-type", 1)conn.index({"name":"data1", "value":"value1"}, "test-index", "test-type2", 1, parent=1)conn.index({"name":"Bill Baloney", "parsedtext":"Bill Testere nice guy", "uuid":"22222", "position":2}, "test-index", "test-type", 2)conn.index({"name":"data2", "value":"value2"}, "test-index", "test-type2", 2, parent=2)conn.index({"name":u"百 度 中 国"}, "test-index", "test-type")#这个相当于中文的一元切分吧-_-conn.index({"name":u"百 中 度"}, "test-index", "test-type")conn.default_indices=["test-index"]#设置默认的索引conn.refresh()#刷新以获得最新插入的文档q = pyes.TermQuery("name", "bill")#查询name中包含bill的记录results = conn.search(q)for r in results: print r#查询name中包含 百度 的数据q = pyes.StringQuery(u"百 度",'name')results = conn.search(q)for r in results: print r#查询name中包含 百度 或着 中度 的数据q = pyes.StringQuery(u"百 度 OR 中 度",'name')results = conn.search(q)for r in results: print r
相关内容
- python生成验证码,文字转换为图片,,用python把文字生成
- python 获取mac地址的两种方法,pythonmac,1)通用方法,借助
- python3 连接sqlite实例,python3sqlite实例,python3连接sql
- python读取windows系统信息,python读取系统信息,需要使用
- Python 实现一个小功能: 删除某路径下文件及文件夹的
- python获取网络时间和本地时间,python获取网络,今天我们
- python编写的一个简单的扫描端口的程序,python编写端口
- python监控网站运行异常并发送邮件,python监控发送邮件
- python开发简单socket程序在两台电脑之间传输消息,pyt
- Python比较两个图片的相似度,,这段代码实用pil模块比
评论关闭