本文整理汇总了Python中pysolr.Solr.search方法的典型用法代码示例。如果您正苦于以下问题:Python Solr.search方法的具体用法?Python Solr.search怎么用?Python Solr.search使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pysolr.Solr
的用法示例。
在下文中一共展示了Solr.search方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: search_results
# 需要导入模块: from pysolr import Solr [as 别名]
# 或者: from pysolr.Solr import search [as 别名]
def search_results(request):
conn = Solr(request.registry.settings['solr_base_url'], decoder=decoder)
params = request.GET.copy()
q = params.pop('q', None)
if q is None:
return HTTPFound('http://2012.haip.cc/')
params.update({
'facet': 'true',
'facet.limit': 20,
'facet.mincount': 1,
'facet.sort': 'count',
'facet.field': ['language', 'author_exact', 'year'],
'fl': '*',
})
# TODO: get cover data, description from https://developers.google.com/books/docs/v1/reference/volumes
# TODO: refactor logic from template to view
# TODO: tests
# first do request without fq so we get all facet values
params_temp = params.copy()
if 'fq' in params_temp:
del params_temp['fq']
facet_fields = conn.search(q, **params_temp).facets['facet_fields']
# workaround due to limitation that kwargs can't handle multidict
if 'fq' in params:
params['fq'] = ' AND '.join(params.getall('fq'))
log.debug(params)
results = conn.search(q, **params)
log.debug(results)
allowed_networks = request.registry.settings['allowed_networks'].split(',')
if request.client_addr in iptools.IpRangeList(*allowed_networks):
is_trusted_ip = True
else:
is_trusted_ip = False
out = {
'results': list(results),
'q': q,
'facet_fields': facet_fields,
'facets': params.get('fq', []),
}
if request.matched_route.name.endswith('json'):
return out
else:
out.update({
'with_facet': with_facet,
'without_facet': without_facet,
'format_byte_size': format_byte_size,
'format_facet': format_facet,
'is_trusted_ip': is_trusted_ip,
})
return out
示例2: check_solr
# 需要导入模块: from pysolr import Solr [as 别名]
# 或者: from pysolr.Solr import search [as 别名]
def check_solr(using='solr'):
try:
from pysolr import Solr, SolrError
except ImportError:
raise SkipTest("pysolr not installed.")
solr = Solr(settings.HAYSTACK_CONNECTIONS[using]['URL'])
try:
solr.search('*:*')
except SolrError as e:
raise SkipTest("solr not running on %r" % settings.HAYSTACK_CONNECTIONS[using]['URL'], e)
示例3: test_dismax_loc
# 需要导入模块: from pysolr import Solr [as 别名]
# 或者: from pysolr.Solr import search [as 别名]
def test_dismax_loc(self):
"""docstring for test_dismax"""
conn = Solr(SOLR_URL)
loc_name = 'downing st'
loc = TEST_LOCS[loc_name]
print '\n\n*** %s ' % loc_name, loc
kwords = 'heart'
kw = {
'rows': settings.SOLR_ROWS,
'fl': '*,score',
'qt': 'resources',
'sfield': 'pt_location',
'pt': loc,
'bf': 'recip(geodist(),2,200,20)^20',
'sort': 'score desc',
}
results = conn.search(kwords, **kw)
print '\n--\nsearch on [%s] : ' % (kwords)
for result in results:
print '-', result['score'], result['title'], result.get('pt_location', '')
示例4: clear_missing
# 需要导入模块: from pysolr import Solr [as 别名]
# 或者: from pysolr.Solr import search [as 别名]
def clear_missing(self, verbose=False):
conn = Solr(settings.SOLR_URL)
start = 0
to_delete = []
pb = None
if verbose: print "Checking for indexed records no longer in database"
while True:
if verbose and pb: pb.update(start)
result = conn.search('*:*', sort='id asc', start=start, rows=500, fields=['id'])
if not result:
break
if verbose and not pb: pb = ProgressBar(result.hits)
ids = [int(r['id']) for r in result]
records = Record.objects.filter(id__in=ids).values_list('id', flat=True)
for r in records:
ids.remove(r)
to_delete.extend(ids)
start += 500
if verbose and pb: pb.done()
pb = None
if verbose and to_delete:
print "Removing unneeded records from index"
pb = ProgressBar(len(to_delete))
while to_delete:
if verbose and pb: pb.update(pb.total - len(to_delete))
conn.delete(q='id:(%s)' % ' '.join(map(str, to_delete[:500])))
to_delete = to_delete[500:]
if verbose and pb: pb.done()
示例5: test_custom_results_class
# 需要导入模块: from pysolr import Solr [as 别名]
# 或者: from pysolr.Solr import search [as 别名]
def test_custom_results_class(self):
solr = Solr('http://localhost:8983/solr/core0', results_cls=dict)
results = solr.search(q='*:*')
assert isinstance(results, dict)
assert 'responseHeader' in results
assert 'response' in results
示例6: clear_solr
# 需要导入模块: from pysolr import Solr [as 别名]
# 或者: from pysolr.Solr import search [as 别名]
def clear_solr(buid):
"""Delete all jobs for a given business unit/job source."""
conn = Solr(settings.HAYSTACK_CONNECTIONS["default"]["URL"])
hits = conn.search(q="*:*", rows=1, mlt="false", facet="false").hits
logging.info("BUID:%s - SOLR - Deleting all %s jobs" % (buid, hits))
conn.delete(q="buid:%s" % buid)
logging.info("BUID:%s - SOLR - All jobs deleted." % buid)
示例7: handle
# 需要导入模块: from pysolr import Solr [as 别名]
# 或者: from pysolr.Solr import search [as 别名]
def handle(self, port="15672", queues="solr,priority", *args, **options):
# Determine the number of tasks still in Rabbit
msg_count = 0
for queue in queues.split(','):
# Get the queue data from the rabbit Management API
uri = "http://%(broker)s:%(port)s/api/queues/dseo-vhost/%(queue)s" % {'broker': settings.BROKER_HOST,
'port': port,
'queue': queue}
resp = requests.get(uri, auth=(settings.BROKER_USER, settings.BROKER_PASSWORD))
data = json.loads(resp.content)
msg_count += data["messages_ready"]
msg_count += data["messages_unacknowledged"]
# If we find that having a couple long running messages can lead to false positives,
# we can change the cutoff here.
if msg_count <= self.msg_cutoff:
print "No messages in the queue(s), do not raise an alert."
return
# Determine the number of recently updated jobs in solr.
conn = Solr(settings.HAYSTACK_CONNECTIONS['default']['URL'])
start_date = datetime.now() - self.look_behind
solr_count = conn.search("date_added:[%s TO NOW]" % (start_date.iso_format() + "Z")).hits
if solr_count <= self.solr_cutoff:
msg = "Found %s messages in rabbit, but saw %s updated job in the last hour. Perhaps the workers are not responding?" % (msg_count, solr_count)
send_mail("Rabbit & Solr Monitoring",
msg,
"[email protected]",
"[email protected]")
示例8: search
# 需要导入模块: from pysolr import Solr [as 别名]
# 或者: from pysolr.Solr import search [as 别名]
def search(request):
query = request.GET.get('q', '')
if not query:
return dict(query=query)
conn = Solr(settings.SOLR_BASE)
results = [res for res in [extract_response(r) for r in conn.search(query)]
if res is not None]
return dict(query=query, responses=results)
示例9: loadsolr
# 需要导入模块: from pysolr import Solr [as 别名]
# 或者: from pysolr.Solr import search [as 别名]
def loadsolr(request):
collection_id = request.POST.get('collection_id', '')
import_classification = request.POST.get('import_classification', '')
solr = Solr(settings.CDRS_SOLR_URL)
created_count = 0
updated_count = 0
PollenSample.objects.all().delete()
options = {'qt': 'forest-data',
'collection_id': collection_id,
'rows': '1000',
'json.nl': 'map'
}
try:
set = "Pollen Types"
results = solr.search('import_classifications:("' +
import_classification + '" AND "' + set + '")',
**options)
created, updated = process_pollen_types(results)
created_count += created
updated_count += updated
set = 'Raw Counts of 65 Pollen Types'
results = solr.search('import_classifications:("' +
import_classification + '" AND "' + set + '")',
**options)
created, updated = _process_samples(results, "count")
created_count += created
updated_count += updated
set = 'Percentages of 15 Pollen Types'
results = solr.search('import_classifications:("' +
import_classification + '" AND "' + set + '")',
**options)
created, updated = _process_samples(results, "percentage")
created_count = created_count + created
updated_count = updated_count + updated
cache.set('solr_created', created_count)
cache.set('solr_updated', updated_count)
except Exception, e:
cache.set('solr_error', str(e))
示例10: admin_cdrs_import
# 需要导入模块: from pysolr import Solr [as 别名]
# 或者: from pysolr.Solr import search [as 别名]
def admin_cdrs_import(request):
if (request.method != 'POST'):
return render_to_response('portal/admin_cdrs.html', {})
created = 0
updated = 0
solr = Solr(settings.CDRS_SOLR_URL)
application = request.POST.get('application', '')
collection_id = request.POST.get('collection_id', '')
import_classification = request.POST.get('import_classification', '')
dt = request.POST.get('last_import_date', '')
tm = urllib.unquote(request.POST.get('last_import_time', '00:00'))
q = 'import_classifications:"' + import_classification + '"'
options = {'qt': 'forest-data'}
last_import_date = LastImportDate.get_last_import_date(dt, tm, application)
if last_import_date:
utc = last_import_date.astimezone(FixedOffset(0))
q += ' AND last_modified:[' + utc.strftime(
'%Y-%m-%dT%H:%M:%SZ') + ' TO NOW]'
try:
collections = urllib.unquote(collection_id).split(",")
for c in collections:
# Get list of datasets in each collection id
record_count = SolrUtilities().get_count_by_lastmodified(
c, import_classification, last_import_date)
retrieved = 0
while (retrieved < record_count):
to_retrieve = min(1000, record_count - retrieved)
options['collection_id'] = c
options['start'] = str(retrieved)
options['rows'] = str(to_retrieve)
results = solr.search(q, **options)
for result in results:
if 'dataset_id' in result:
if process_metadata(result):
created += 1
else:
updated += 1
retrieved = retrieved + to_retrieve
# Update the last import date
lid = LastImportDate.update_last_import_date(application)
cache.set('solr_import_date', lid.strftime('%Y-%m-%d'))
cache.set('solr_import_time', lid.strftime('%H:%M:%S'))
cache.set('solr_created', created)
cache.set('solr_updated', updated)
except Exception, e:
cache.set('solr_error', str(e))
示例11: _solr_results_chunk
# 需要导入模块: from pysolr import Solr [as 别名]
# 或者: from pysolr.Solr import search [as 别名]
def _solr_results_chunk(tup, buid, step):
"""
Takes a (start_index, stop_index) tuple and gets the results in that
range from the Solr index.
"""
conn = Solr(settings.HAYSTACK_CONNECTIONS["default"]["URL"])
results = conn.search(
"*:*", fq="buid:%s" % buid, fl="uid", rows=step, start=tup[0], facet="false", mlt="false"
).docs
return set([i["uid"] for i in results])
示例12: InventoryTest
# 需要导入模块: from pysolr import Solr [as 别名]
# 或者: from pysolr.Solr import search [as 别名]
class InventoryTest(unittest.TestCase):
'''
testing solr, using VM core
'''
@classmethod
def setUpClass(cls):
#TODO: all config parsing - to module level setup
config = ConfigParser()
config.read("config/config.ini")
cls.solr_url = config['DEFAULT']['solr_url'] + 'vm'
#TODO: figure why
logUtils.setup_logging(config)
def setUp(self):
self.solr = Solr(InventoryTest.solr_url, timeout=2)
self.solr.delete(q='*:*')
self.inventory = Inventory(InventoryTest.solr_url);
super(InventoryTest, self).tearDown()
def testAdd(self):
self.assertEqual(len(self.solr.search('*:*')), 0)
self.inventory.post(VMDATA)
self.assertEqual(len(self.solr.search('*:*')), 2)
self.assertEqual(len(self.solr.search(VMDATA[0]['name'])), 1)
def testVmUpdate(self):
self.inventory.post(VMDATA)
self.assertEqual(len(self.solr.search('memory:513')), 0)
vm_update_data = [{'id':VMDATA[0]['id'], 'fields':
[
{'name':'power', 'value':'off', 'command':'set'},
{'name':'memory', 'value':513, 'command':'set'}
]
}];
self.inventory.put(vm_update_data);
self.assertEqual(len(self.solr.search('memory:513')), 1)
示例13: task_check_solr_count
# 需要导入模块: from pysolr import Solr [as 别名]
# 或者: from pysolr.Solr import search [as 别名]
def task_check_solr_count(buid, count):
buid = int(buid)
conn = Solr(settings.HAYSTACK_CONNECTIONS['default']['URL'])
hits = conn.search(q="buid:%s" % buid, rows=1, mlt="false", facet="false").hits
if int(count) != int(hits):
logger.warn("For BUID: %s, we expected %s jobs, but have %s jobs", buid, count, hits)
send_mail(recipient_list=["[email protected]"],
from_email="[email protected]",
subject="Buid Count for %s is incorrect." % buid,
message="For BUID: %s, we expected %s jobs, but have %s jobs. Check imports for this buid." %
(buid, count, hits),
fail_silently=False)
示例14: find_by_place_or_kwords
# 需要导入模块: from pysolr import Solr [as 别名]
# 或者: from pysolr.Solr import search [as 别名]
def find_by_place_or_kwords(name, kwords, loc_boost=None, start=0, max=None, accounts=None):
"""docstring for find_by_place_or_kwords"""
conn = Solr(settings.SOLR_URL)
if name:
return find_by_place(name, kwords, loc_boost, start, max, accounts)
# keywords only
kw = {
'start': start,
'rows': minmax(0, settings.SOLR_ROWS, max, settings.SOLR_ROWS),
'fl': '*,score',
'qt': 'resources',
}
return None, conn.search(kwords.strip() or '*:*', **kw)
示例15: search
# 需要导入模块: from pysolr import Solr [as 别名]
# 或者: from pysolr.Solr import search [as 别名]
def search(request):
import re
from pysolr import Solr
from stats.models import DailySearch
from settings import SOLR_URL
def _fail(query):
# phrase is not changed, query is normalized phrase
return render_to_response('search_results.html', {
'result': [],
'query': query,
'phrase': query,
}, context_instance=RequestContext(request))
phrase = request.GET.get('phrase')
try:
conn = Solr(SOLR_URL)
except:
return _fail(phrase)
result = []
if not phrase:
raise Http404("Malformed request.")
q = phrase
if phrase.startswith('*') or phrase.startswith('?'):
q = phrase[1:]
q = q.strip()
q = re.sub('['+'\[<>@\]'+']', '', q)
q = re.sub('`', '"', q)
q = re.sub('\s*:',':', q)
q = re.sub('(?<!author)(?<!title)(?<!text)(?<!file)(?<!tag)(?<!artist)(?<!album)(?<!year)(?<!company)(?<!created):', ' ', q)
if not q:
return _fail(phrase)
results = conn.search(q)
if not results:
return _fail(q)
ids = [i['id'] for i in results]
result = QuerySetPaginator(Topic.objects.filter(pk__in=ids), RESULTS_ON_PAGE, orphans=5)
if result.num_pages == 0:
return _fail(q)
p = DailySearch.objects.create(phrase=q.strip())
page = request.GET.get('page', 1)
try:
page = int(page)
r = result.page(page)
except (InvalidPage, ValueError):
raise Http404("No such page")
return render_to_response('search_results.html', {
'result': r,
'query': q,
'phrase': phrase,
'page': int(page),
'title': phrase,
}, context_instance=RequestContext(request))