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
0 0
原创粉丝点击