设为首页 收藏本站
查看: 996|回复: 0

[经验分享] 搜索引擎–elasticsearch python客户端pyes 建立索引和搜索

[复制链接]

尚未签到

发表于 2017-5-8 08:59:16 | 显示全部楼层 |阅读模式
主机环境:Ubuntu 13.04
Python版本:2.7.4
转载请标明:http://blog.yanming8.cn/archives/118

官方站点:http://www.elasticsearch.com/
中文站点:http://es-cn.medcl.net/
下面一段介绍引用自中文站点:
好吧,假如你建了一个web站点或者是一个应用程序,你就可能会需要添加搜索功能(因为这太有必要了),而事实上让搜索跑起来是有难度的,我们不仅想要搜索的速度快,而且还要安装方便(最好是无痛安装),另外模式定义要非常自由(schema free),可以通过HTTP以JSON格式的数据来进行索引,服务器必须是一直可用的(HA高可用,这个不能丢),从一台机器能够扩展到成千上万台,然后搜索必须是实时的(real-time),使用起来一定要简单、支持多租户,我们需要一整套的解决方案,并且是为云构建的。
“让搜索更简单”,这是我们的宣言,“并且要酷,像盆景一样”
elasticsearch的目标是解决上面的所有问题以及更多。她是开源的(Apache2协议),分布式的,RESTful的,构建在Apache Lucene之上的的搜索引擎.


1 、分布式服务器的安装:
首先下载http://www.elasticsearch.org/download/,选择合适的版本安装,这里直接下载了适合ubuntu的DEB包,下载完成后直接dpkg命令安装。安装完成后可以通过
sudo service elasticsearch start
来启动服务。

2、安装pyes客户端
使用命令
1pip install pyes




安装elasticsearch的python的组件。

3、安装pyes的中文分词组件
直接下载https://github.com/medcl/elasticsearch-rtf/blob/master/elasticsearch/plugins/analysis-ik/elasticsearch-analysis-ik-1.2.2.jar中文分词组件
然后移动的elasticsearch的安装目录/usr/share/elasticsearch/analysis-ik/,
修改配置文件/etc/elasticsearch/elasticsearch.yml
设置插件的路径
path.plugins: /usr/share/elasticsearch/plugins
并添加分词组建配置
1index:

2analysis:

3analyzer:

4ik:

5alias: [ik_analyzer]

6type: org.elasticsearch.index.analysis.IkAnalyzerProvider




最后下载IK分词使用的词典

  • cd /etc/elasticsearch
  • wget http://github.com/downloads/medcl/elasticsearch-analysis-ik/ik.zip –no-check-certificate
  • unzip ik.zip
  • rm ik.zip

重启elasticsearch服务即可。


4、建立索引
01#!/usr/bin/env python

02#-*- coding:utf-8-*-

03importos

04importsys

05frompyesimport*

06

07INDEX_NAME='txtfiles'

08

09classIndexFiles(object):

10def__init__(self,root):

11conn=ES('127.0.0.1:9200', timeout=3.5)#连接ES

12try:

13conn.delete_index(INDEX_NAME)

14#pass

15except:

16pass

17conn.create_index(INDEX_NAME)#新建一个索引

18

19#定义索引存储结构

20mapping={u'content': {'boost':1.0,

21'index':'analyzed',

22'store':'yes',

23'type': u'string',

24"indexAnalyzer":"ik",

25"searchAnalyzer":"ik",

26"term_vector":"with_positions_offsets"},

27u'name': {'boost':1.0,

28'index':'analyzed',

29'store':'yes',

30'type': u'string',

31"indexAnalyzer":"ik",

32"searchAnalyzer":"ik",

33"term_vector":"with_positions_offsets"},

34u'dirpath': {'boost':1.0,

35'index':'analyzed',

36'store':'yes',

37'type': u'string',

38"indexAnalyzer":"ik",

39"searchAnalyzer":"ik",

40"term_vector":"with_positions_offsets"},

41}

42

43conn.put_mapping("test-type", {'properties':mapping}, [INDEX_NAME])#定义test-type

44

45self.addIndex(conn,root)

46

47conn.default_indices=[INDEX_NAME]#设置默认的索引

48conn.refresh()#刷新以获得最新插入的文档

49

50defaddIndex(self,conn,root):

51printroot

52forroot, dirnames, filenamesinos.walk(root):

53forfilenameinfilenames:

54ifnotfilename.endswith('.txt'):

55continue

56print"Indexing file ", filename

57try:

58path=os.path.join(root,filename)

59file=open(path)

60contents=unicode(file.read(),'utf-8')

61file.close()

62iflen(contents) >0:

63conn.index({'name':filename,'dirpath':root,'content':contents},INDEX_NAME,'test-type')

64else:

65print'no contents in file %s',path

66exceptException,e:

67printe

68

69if__name__=='__main__':

70IndexFiles('./txtfiles')





5、搜索并高亮显示
view source


01#!/usr/bin/env python

02#-*- coding:utf-8 -*-

03

04importos

05importsys

06frompyesimport*

07

08conn=ES('127.0.0.1:9200', timeout=3.5)#连接ES

09sq=StringQuery(u'世界末日','content')

10h=HighLighter(['<b>'], ['</b>'], fragment_size=20)

11

12s=Search(sq,highlight=h)

13s.add_highlight("content")

14results=conn.search(s,indices='txtfiles',doc_types='test-type')

15

16list=[]

17forrinresults:

18if(r._meta.highlight.has_key("content")):

19r['content']=r._meta.highlight[u"content"][0]

20list.append(r)

21printr['content']

22printlen(list)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-374442-1-1.html 上篇帖子: 简明 python例程 (爬取 某地一年天气最高温度) 下篇帖子: 【Python真的很强大】使用casperjs获取javascript渲染生成的html内容
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表