SolrCloudpy 学习笔记
来源:互联网 发布:opta数据 编辑:程序博客网 时间:2024/06/05 18:32
转载请声明出处:http://blog.csdn.net/wbcg111/article/details/48090969
solrcloudpy简介
solrcloudpy是python与solrcloud进行交互的一个库。这个库目的在于利用solr的以下优势:
- 分布式索引与检索和清晰的故障分析
- 完整JSON API
- 集中式索引管理
- 近实时搜索
这个API在某种程度上与pymongo的API十分相似。
>>> conn = SolrConnection(["localhost:9983","localhost:8984"])>>> conn.create('test1',num_shards=1,replication_factor=2)# Access an existing collection>>> conn.test_collection.search(q='query'){ "response": "SolrResponse << {'start': 0, 'numFound': 0, 'docs': []} >>"}>>> conn["test_collection"].search(q='query 2'){ "response": "SolrResponse << {'start': 0, 'numFound': 0, 'docs': []} >>"}
前提条件
使用这个库时,你需要在云的模式下运行solr。为了能够使用控制台,你需要安装ipython包。
安装
pip安装:
pip install solrcloudpy
安装最近版本:
pip install git+https://github.com/dfdeshom/solrcloudpy.git#egg=solrcloudpy
应用控制台
solrcloudpy附带了可以简单地通过输入solrconsole来运行的控制台,它有几个方便之处,例如已经创建的SolrConnection对象和SearchOptions可以直接引用。
$ solrconsole --host=localhost --port=8983SolrCloud ConsoleUse the 'conn' object to access a collectionType 'collections' to see the list of available collectionssolr localhost:8983> conn.collection1.search(SearchOptions().commonparams.q("junk")).result{ "response": "SolrResponse << {'start': 0, 'numFound': 0, 'docs': []} >>"}solr localhost:8983> res.response{ "start": 0, "numFound": 0, "docs": []}
使用方法:
solrconsole [-h] [--host HOST] [--port PORT] [--user USER] [--password PASSWORD]
可选参数:
- -h,–help 显示帮助信息
- –host HOST 主机
- –port PORT 端口
- –user USER 用户
- –password PASSWARD 密码
搜索一个集合
虽然可以使用普通的字典来传递参数给solr ,但是SearchOptions类使这个任务变得更加方便。使用这个类,可以进行以下查询:
- 通过commonparams成员变量正常的搜索
- 通过mltparams成员变量MLT搜索
- 通过facetparams成员变层面搜索
正常搜索
最常见的搜索参数是支持的,并且可以链式运用。方法名称对应的参数传递给solr。常见的搜索参数可以在这里找到:https://cwiki.apache.org/confluence/display/solr/Common+Query+Parameters
例如:
>>> se.commonparams.q("nsa")>>> se.commonparams.fl("author,link").sort("pub_date desc")>>> se{'commonparams': {'q': set(['nsa']), 'sort': set(['pub_date desc']), 'fl': set(['author,link'])}, 'facetparams': {},'mltparams': {}}
层面搜索
层面搜索也支持大多数的参数,文档:http://wiki.apache.org/solr/simplefacetparameters
例如:
>>> se = SearchOptions() >>> se.commonparams.q("*:*").fl('title,author') {'q': set(['*:*']), 'fl': set(['title,author'])} >>> se.facetparams.field("author") {'facet.field': set(['id'])} >>> conn.collection1.search(se) {"facet_counts": "SolrResponse << {'facet_ranges': {}, 'facet_fields': {\n \"author\": \"SolrResponse << {'William Saletan': 1325, 'Jun ... >>","response": "SolrResponse << {'start': 0, 'numFound': 74104, 'docs': [{u'title': u'The Case for Getting Drunk at Work', u'author' ... >>"
相似搜索
相似搜索是solr的一个特征功能,能够返回与搜索结果相似的文档。solrcloudpy通过mlt()方法支持相似搜索。
例如:
>>> se.commonparams.q("nsa")>>> se.mltparams.count("5")>>> conn.collection1.mlt(se){ "response": "SolrResponse << {'start': 0, 'numFound': 0, 'docs': []} >>", "match": "SolrResponse << {'start': 0, 'numFound': 590, 'docs': [{u'title': u'Booz Allen Fires NSA Leaker', u'section': u'brie... >>"
搜索结果
所有查询结果都以solrresponse对象返回。这个对象以JSON响应Solr服务器,使其键可以通过正常的关键语法或属性语法被访问。
例如:
>>> res = conn.collection1.search(se)>>> res{ "facet_counts": "SolrResponse << {'facet_ranges': {}, 'facet_fields': {\n \"author\": \"SolrResponse << {'William Saletan': 1325, 'Jun ... >>", "response": "SolrResponse << {'start': 0, 'numFound': 74104, 'docs': [{u'title': u'The Case for Getting Drunk at Work', u'author' ... >>"}>>> res.facet_counts{ "facet_ranges": "SolrResponse << {} >>", "facet_fields": "SolrResponse << {'author': {\n \"William Saletan\": 1325, \n \"June Thomas\": 612, \n \"Mike Steinberger\": 103, \n ... >>", "facet_dates": "SolrResponse << {} >>", "facet_queries": "SolrResponse << {} >>"}>>> res.facet_counts.facet_fields.author['Aisha Harris']472
API 接口
SolrConnection 对象
连接一个配置好的solr服务器
可以使用字典式或者属性式风格得到一个SolrConnection实例访问对象:
>>> from solrcloudpy.connection import SolrConnection>>> conn = SolrConnection()>>> conn.list()[u'collection1']>>> conn['collection1']SolrCollection<collection1>
类 solrcloudpy.connection.**SolrConnection**(server='localhost:8983', detect_live_nodes=False, user=None, password=None, timeout=10)
连接了一个或者几个solr服务器
参数:
server
-服务器,可以是一个,也可以是多个服务器。 例如:localhost:8983 或者[localhost,solr1.domain.com:8983]
detect_live_nodes
-是否自动检测存活的节点,这是由Zookeeper列出来的一系列可用IP。默认值是Fslse.user
-用户名字password
-密码timeout
-HTTP请求时间
cluster_health
确定集群中所有节点和集合的状态。返回有问题的节点或集合,以及它们的状态,否则返回OK。
cluster_leader
返回集群的leader
create_collection(collname,*args,**kwargs)
创建一个集合:
参数:
- collname -集合的名字
- *args -添加的其他参数
- **kwargs -额外的命名参数
list()
列出集群中存在的集合
live_nodes
列出存活的节点
管理并搜索一个solr集合
使用集合接口您可以创建、删除或重新加载集合。
>>> from solrcloudpy.connection import SolrConnection>>> conn = SolrConnection()>>> coll = conn['test1'].create()>>> collSolrCollection<collection1>
这个类也可用于查询一个Solr的集合。默认支持的端点是:
/select:默认Solr请求处理程序
/mlt:相似搜索请求处理程序
/clustering:Solr的集群组件
以下的端点将会被支持:
- /get:实时搜索组件
- /highlight :搜索高亮组件
- /terms :术语组件
例如:
>>> from solrcloudpy import SolrConnection>>> coll = SolrConnection()['collection1']>>> response = coll.search({'q':'money'})>>> response<SolrResponse [200]>>>> response.result{"response": "SolrResponse << {'start': 0, 'numFound': 0, 'docs': []} >>"}
类solrcloudpy.SolrCollection(connection,name)
给一个集合添加一系列文章
add(docs) #docs -要添加的文章列表
commit() #提交对集合做出的修改
create(replication_factor=1,force=False,**kwargs)
创建一个集合,参数:
- num_shards -集合中分片的数目,整数
- replication_factor -集合副本的数目,整数
- force - 布尔类型的值
- kwargs - 额外参数
为一个创建一个别名
create_alias(alias) #alias - 别名名字
创建一个新的分片
create_shard(shard, create_node_set=None)shard #分片名字create_node_set #允许定义的节点传递给新建的分片
删除一个集合中的文档
delete(id=None, q=None, commit=True )id #文章idq #通过查询删除commit #是否提交更改
删除别名
delete_alias(alias)
删除副本
delete_replica(replica, shard)replica #要删除的副本的名字shard #包含要被删除的副本的分片
删除一个集合
drop()
查看集群中是否存在该集合
exists()collection #要查询的集合
查看更多:http://dfdeshom.github.io/solrcloudpy/apidocs/solrcloudpy.html
SolrSchema 对象
类 solrcloudpy.collection.schema.SolrSchema(connection, collection_name)
获取和修改模式
在模式中添加字段
add_fields(json_schema)参数:json_schema–指定要添加的字段
获取模式中的副本字段的信息
get_copyfield(field)
参数:ftype–字段类型的名称
获取模式中的所有副本字段的信息
get_copyfields()
在模式中获取动态字段的信息
get_dynamic_field(field)参数:field-字段的名称
在模式中获取动态字段的信息
get_dynamic_fields()
在模式中获取一个字段的信息
get_field(field)参数:field-字段的名称
获取模式中的所有字段的信息
get_fields()
在模式中获取字段类型的信息
get_fieldtype(ftype)参数:ftype–字段类型的名称
在模式中获取字段类型的信息
get_fieldtypes()
搜索对象
类 solrcloudpy.parameters.SearchOptions(**kwargs)
>>> se = SearchOptions()>>> se.commonparams.q("*:*").fl('*,score'){'q': set(['*:*']), 'fl': set(['*,score'])}>>> se.facetparams.field("id"){'facet.field': set(['id'])}>>> se{'commonparams': {'q': set(['*:*']), 'fl': set(['*,score'])}, 'facetparams': {'facet.field': set(['id'])}, 'mltparams': {}}
搜索结果对象
类solrcloudpy.utils.SolrResult(obj)
>>> result{"response": "SolrResponse << {'start': 0, 'numFound': 0, 'docs': []} >>"}>>> result['response'].start0>>> result.response.numFound0
- SolrCloudpy 学习笔记
- 学习笔记?
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- UVa 11549 - Calculator Conundrum(Floyd判圈法)
- 后IOE时代,Mysql 与 Postgre SQL的对比
- uvalive4838(凸包+重心)
- @SuppressLint("NewApi")和@TargetApi()的区别
- SQLite_Android
- SolrCloudpy 学习笔记
- 学习《算法导论》第一章 插入排序 总结
- iPhone开发之UIScrollView滚动组件的使用(七)利用NSTimer计时器和UIPageControl组件代码实现图片轮播器
- JSP中九个隐含对象
- 设计模式实践(二)工厂模式
- JDK8运行Applet
- 经典爱情名言大全
- UVa 1121 - Subsequence(尺取法)
- 无法连接到WMI提供程序。你没有权限或者该服务器无法访问