对python 操作solr索引数据的实例详解


Posted in Python onDecember 07, 2018

测试代码1:

def test(self):
  data = {"add": {"doc": {"id": "100001", "*字段名*": u"我是一个大好人"}}}
  params = {"boost": 1.0, "overwrite": "true", "commitWithin": 1000}
  url = 'http://127.0.0.1:8983/solr/mycore/update?wt=json'
  headers = {"Content-Type": "application/json"}
  r = requests.post(url, json=data, params=params, headers=headers)
  print r.text


 def Index_data(self):
  solr = pysolr.Solr('http://127.0.0.1:8983/solr/mycore/', timeout=10)

  # How you'd index data.
  result = solr.add([
   {
    "id": "doc_1",
    "title": "A test document",
   },
   {
    "id": "doc_2",
    "title": "The Banana: Tasty or Dangerous?",
   },
  ])
  print result

测试代码2:

实际数据:

对python 操作solr索引数据的实例详解

def Index_Data_FromCSV(self, csvfile):
  '''
   从CSV文件中读取数据,并索引到solr中
   :param csvfile: csv文件,包括完整路径
   :return:
   '''
  list = CSVOP.ReadCSV(csvfile)
  index = 0
  doc = {}
  params = {"boost": 1.0, "overwrite": "true", "commitWithin": 1000}
  url = 'http://127.0.0.1:8983/solr/mycore/update?wt=json'
  headers = {"Content-Type": "application/json"}
  for item in list:
   if index > 0: # 第一行是标题
    try:
     doc['title'] = item[0].decode('GB2312')
     doc['link'] = item[1]
     # doc['date'] = item[2]
     doc['source'] = item[3].decode('GB2312')
     doc['keyword'] = item[4].decode('GB2312')
     data = {"add": {"doc": doc}}
     r = requests.post(url, json=data, params=params, headers=headers)
     print r.text
    except Exception,e:
     print e.message

   print index
   index += 1

#pysolr客户端代码
 def pysolr_Index_Data_FromCSV(self, csvfile,url='http://127.0.0.1:8983/solr/mycore/'):
  '''
   从CSV文件中读取数据,并索引到solr中
   :param csvfile: csv文件,包括完整路径
   :return:
   '''
  list = CSVOP.ReadCSV(csvfile)
  index = 0
  listdocs = []
  for item in list:
   if index > 0: # 第一行是标题
    doc = {}
    try:
     doc['title'] = item[0].decode('GB2312')
     doc['link'] = item[1]
     # doc['date'] = item[2]
     doc['source'] = item[3].decode('GB2312')
     doc['keyword'] = item[4].decode('GB2312')
     listdocs.append(doc)
    except Exception,e:
     print e.message
   index += 1
  solr = pysolr.Solr(url, timeout=10)
  result = solr.add(listdocs)
  print result

查询代码:

def search_data(self,message='视频'):
  url = 'http://127.0.0.1:8983/solr/mycore/select?q=title:"\%s"&wt=json&indent=true' % message
  r = requests.get(url, verify=False)
  print r.text
  r = r.json()['response']['numFound']
  print message + ":" + str(r)
  
  #pysolr客户端
  def search_data(self,where='视频',url='http://127.0.0.1:8983/solr/mycore/'):
  solr = pysolr.Solr(url, timeout=10)
  dict = {'start':10,'rows': 30,'fl':'title,keyword,source,link'}
  result = solr.search('title:视频',**dict)
  # result = solr.search('title:视频')
  # print result.raw_response['response']['numFound']

  for item in result:
   print 'keyword: %s'% item['keyword']
   print 'title: %s'% item['title']
   print 'source: %s'% item['source']
   print 'link: %s'% item['link']
   print '

'

输出结果:

{
 "responseHeader":{
 "status":0,
 "QTime":0,
 "params":{
  "q":"title:\"\\视频\"",
  "indent":"true",
  "wt":"json"}},
 "response":{"numFound":123,"start":0,"docs":[
  {
  "source":"中彩网",
  "link":"http://www.zhcw.com/video/kaijiangshipin-3D/11981126.shtml",
  "keyword":"视频",
  "title":"福彩3D开奖 视频 -中彩 视频",
  "id":"2f0a9d21-3771-4efa-a0cc-e0484cc97993",
  "_version_":1584214368617234432},
  {
  "source":"新浪视频",
  "link":"http://video.sina.com.cn/news/spj/topvideoes20170707/?opsubject_id=top1",
  "keyword":"视频",
  "title":"今日热门 视频 汇总20170707",
  "id":"c8aae0af-01e9-491f-b999-24b97004a4ba",
  "_version_":1584214367507841024},
  {
  "source":"网易新闻",
  "link":"http://news.163.com/17/0707/13/COOCNUIE00018AOR.html",
  "keyword":"视频",
  "title":"网传"兰桂坊附近不雅 视频 " 警方:传播 视频 将追责",
  "id":"353de48d-ede7-481b-89d3-bc20ab4b3884",
  "_version_":1584214367821365248},
  {
  "source":"凤凰视频",
  "link":"http://v.ifeng.com/video_7480871.shtml",
  "keyword":"视频",
  "title":"创想动画片:花粉过敏症的痛谁懂-凤凰 视频 -最具媒体品质的综合 视频 ...",
  "id":"dc5f19c4-180f-4004-a0db-4499d875a60f",
  "_version_":1584214366819975168},
  {
  "source":"凤凰视频",
  "link":"http://v.ifeng.com/video_7805858.shtml",
  "keyword":"视频",
  "title":"节气说:小暑时节就该这样养生-凤凰 视频 -最具媒体品质的综合 视频 门...",
  "id":"5e9eb7a7-48b8-4e41-9514-7712ae619d9a",
  "_version_":1584214367516229632},
  {
  "source":"凤凰视频",
  "link":"http://v.ifeng.com/video_7483506.shtml",
  "keyword":"视频",
  "title":"听导演讲《神奇女侠》的故事 -凤凰 视频 -最具媒体品质的综合 视频 门户-...",
  "id":"6b1482f1-c0c9-479f-bef7-7de324fb9372",
  "_version_":1584214367647301632},
  {
  "source":"汽车杂志",
  "link":"http://www.jiemian.com/article/1445267.html",
  "keyword":"视频",
  "title":"【视频】欧宝最近找了一堆穿睡衣的辣妈拍了一段超牛的视频",
  "id":"1d327555-a6f3-4513-9a21-43d59418ab82",
  "_version_":1584214368157958144},
  {
  "source":"味觉大师",
  "link":"http://www.jiemian.com/article/1453545.html",
  "keyword":"视频",
  "title":"【视频】大董没有肉的肉味烧茄子",
  "id":"7d777870-93cb-4c18-a32b-734af8f133f1",
  "_version_":1584213891451191296},
  {
  "source":"新浪汽车",
  "link":"http://auto.sina.com.cn/video/zz/2017-07-07/detail-ifyhwehx5311889.shtml",
  "keyword":"视频",
  "title":"视频 :两大神车pk!高尔夫思域怎么选?",
  "id":"3a50b303-6b54-4da3-aee1-a61c678c752d",
  "_version_":1584213892090822656},
  {
  "source":"味觉大师",
  "link":"http://www.jiemian.com/article/1453545.html",
  "keyword":"视频",
  "title":"【视频】大董没有肉的肉味烧茄子",
  "id":"01da8e11-77bc-4c31-ba3a-ba668e846d9d",
  "_version_":1584214366191878144}]
 }}

完整代码:

#-*- coding: UTF-8 -*-
import csv
import os
import codecs


def ReadCSV(filename):
 if os.path.exists(filename):
  with open(filename, 'r') as f:
   reader = csv.reader(f)
   list = []
   for item in reader:
    list.append(item)
   return list

#################################################
#coding=utf-8
import json
import requests

import os
import time
from os import walk
import CSVOP
from datetime import datetime
import pysolr
import math

class SolrClientObj:

 def test(self):
  data = {"add": {"doc": {"id": "100001", "*字段名*": u"我是一个大好人"}}}
  params = {"boost": 1.0, "overwrite": "true", "commitWithin": 1000}
  url = 'http://127.0.0.1:8983/solr/mycore/update?wt=json'
  headers = {"Content-Type": "application/json"}
  r = requests.post(url, json=data, params=params, headers=headers)
  print r.text

 def pysolr_Index_Data_FromCSV(self, csvfile,url='http://127.0.0.1:8983/solr/mycore/'):
  '''
   从CSV文件中读取数据,并索引到solr中
   :param csvfile: csv文件,包括完整路径
   :return:
   '''
  list = CSVOP.ReadCSV(csvfile)
  index = 0
  listdocs = []
  for item in list:
   if index > 0: # 第一行是标题
    doc = {}
    try:
     doc['title'] = item[0].decode('GB2312')
     doc['link'] = item[1]
     # doc['date'] = item[2]
     doc['source'] = item[3].decode('GB2312')
     doc['keyword'] = item[4].decode('GB2312')
     listdocs.append(doc)
    except Exception,e:
     print e.message
   index += 1
  solr = pysolr.Solr(url, timeout=10)
  result = solr.add(listdocs)
  print result

 def Index_Data_FromCSV(self, csvfile):
  '''
   从CSV文件中读取数据,并索引到solr中
   :param csvfile: csv文件,包括完整路径
   :return:
   '''
  list = CSVOP.ReadCSV(csvfile)
  index = 0
  doc = {}
  params = {"boost": 1.0, "overwrite": "true", "commitWithin": 1000}
  url = 'http://127.0.0.1:8983/solr/mycore/update?wt=json'
  headers = {"Content-Type": "application/json"}
  for item in list:
   if index > 0: # 第一行是标题
    try:
     doc['title'] = item[0].decode('GB2312')
     doc['link'] = item[1]
     # doc['date'] = item[2]
     doc['source'] = item[3].decode('GB2312')
     doc['keyword'] = item[4].decode('GB2312')
     data = {"add": {"doc": doc}}
     r = requests.post(url, json=data, params=params, headers=headers)
     print r.text
    except Exception,e:
     print e.message

   print index
   index += 1

 def Index_data(self):
  solr = pysolr.Solr('http://127.0.0.1:8983/solr/mycore/', timeout=10)

  # How you'd index data.
  result = solr.add([
   {
    "id": "doc_1",
    "title": "A test document",
   },
   {
    "id": "doc_2",
    "title": "The Banana: Tasty or Dangerous?",
   },
  ])
  print result

 def search_data(self,where='视频',url='http://127.0.0.1:8983/solr/mycore/'):
  solr = pysolr.Solr(url, timeout=10)
  dict = {'start':10,'rows': 30,'fl':'title,keyword,source,link'}
  result = solr.search('title:视频',**dict)
  # result = solr.search('title:视频')
  # print result.raw_response['response']['numFound']

  for item in result:
   print 'keyword: %s'% item['keyword']
   print 'title: %s'% item['title']
   print 'source: %s'% item['source']
   print 'link: %s'% item['link']
   print '    '

 def delete_index_data(self,where,url='http://127.0.0.1:8983/solr/mycore/'):
  '''
  删除索引
  :param where: 删除的条件
  :param url: url
  :return:
  '''
  solr = pysolr.Solr(url, timeout=10)
  # solr.delete(id=where) #id='id1':删除id为“id1”的索引
  result = solr.delete(q=where) #q='*:*'删除所有索引
  print result


obj = SolrClientObj()
# obj.delete_index_data('*:*') #删除所有索引
# obj.Index_data()
# obj.search_data()
# obj.delete_index_data('doc_1')
obj.search_data('视频')
# csvfile = 'D:/work/Solr/other/exportExcels/2017-07-07_info.csv'
# obj.pysolr_Index_Data_FromCSV(csvfile)

以上这篇对python 操作solr索引数据的实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
linux 下实现python多版本安装实践
Nov 18 Python
使用Python写个小监控
Jan 27 Python
Python实现带百分比的进度条
Jun 28 Python
Python3实战之爬虫抓取网易云音乐的热门评论
Oct 09 Python
利用Python进行数据可视化常见的9种方法!超实用!
Jul 11 Python
用于业余项目的8个优秀Python库
Sep 21 Python
python线程的几种创建方式详解
Aug 29 Python
Python获取二维数组的行列数的2种方法
Feb 11 Python
python3中使用__slots__限定实例属性操作分析
Feb 14 Python
python实现PDF中表格转化为Excel的方法
Jun 16 Python
在keras中对单一输入图像进行预测并返回预测结果操作
Jul 09 Python
python爬虫之selenium库的安装及使用教程
May 23 Python
python用post访问restful服务接口的方法
Dec 07 #Python
python3 实现验证码图片切割的方法
Dec 07 #Python
python 用opencv调用训练好的模型进行识别的方法
Dec 07 #Python
Python cv2 图像自适应灰度直方图均衡化处理方法
Dec 07 #Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 #Python
Python实现的批量修改文件后缀名操作示例
Dec 07 #Python
Python实现随机创建电话号码的方法示例
Dec 07 #Python
You might like
PHP 基本语法格式
2009/12/15 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
php自定文件保存session的方法
2014/12/10 PHP
php实现的递归提成方案实例
2015/11/14 PHP
javascript中的new使用
2010/03/20 Javascript
jquery的trigger和triggerHandler的区别示例介绍
2014/04/20 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
在JavaScript的AngularJS库中进行单元测试的方法
2015/06/23 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
2018/05/30 jQuery
JavaScript中创建原子的方法总结
2018/08/26 Javascript
手动下载Chrome并解决puppeteer无法使用问题
2018/11/12 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
[15:23]教你分分钟做大人:虚空假面
2014/10/30 DOTA
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
scrapy爬虫实例分享
2017/12/28 Python
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
详解python中的闭包
2020/09/07 Python
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
青年志愿者活动方案
2014/08/17 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
同意报考证明
2015/06/17 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server