Merge branch 'master' of github.com:collective/collective.solr

Conflicts:
	CHANGES.txt
This commit is contained in:
Tom Gross 2013-06-27 11:02:15 +02:00
commit f41e273738
7 changed files with 60 additions and 12 deletions

View File

@ -4,10 +4,19 @@ Changelog
4.0 - unreleased
------------------
- Make sure slashes are properly escaped in the search query. Solr 4.0 added
regular expression support, which means that '/' is now a special character
and must be escaped if searching for literal forward slash.
[timo]
- Implement the getDataOrigin method for the FlareContentListingObject that
plone.app.contentlisting defines and that plone.app.search expects to exist.
[timo]
- Use tika for extracting binary content.
[tom_gross]
- Plone 4.3 compatibility of search view
- Plone 4.3 compatibility of search view
[tom_gross]
- Introduce ICheckIndexable-adapter for checking if an object is indexable.
@ -24,7 +33,7 @@ Changelog
3.1 - 2013-02-16
----------------
- Add datehandler support for python date objects.
[jcbrand]
@ -37,6 +46,7 @@ Changelog
- Add inthandler support for not indexing Integers that are None.
[do3cc]
3.0 - 2012-02-06
----------------
@ -44,6 +54,7 @@ Changelog
https://github.com/Jarn/collective.solr/issues/12
[mj]
3.0b5 - 2011-12-07
------------------
@ -63,6 +74,7 @@ Changelog
- Fix control panel adapter to save the search_pattern as utf-8.
[ggozad]
3.0b4 - 2011-11-10
------------------
@ -70,6 +82,7 @@ Changelog
like the membrane catalogs.
[hannosch]
3.0b3 - 2011-11-09
------------------
@ -83,6 +96,7 @@ Changelog
- Tweak search form to better match sunburst proportions.
[elro]
3.0b2 - 2011-10-05
------------------
@ -91,6 +105,7 @@ Changelog
for the facet field with the same name.
[mj]
3.0b1 - 2011-09-27
------------------
@ -98,6 +113,7 @@ Changelog
to keep up with the default field settings of the text field.
[hannosch, mj]
3.0a5 - 2011-09-26
------------------
@ -108,6 +124,7 @@ Changelog
- Include CMFCore's `permissions.zcml`.
[witekdev, hannosch]
3.0a4 - 2011-08-22
------------------
@ -115,6 +132,7 @@ Changelog
explicitly.
[hannosch]
3.0a3 - 2011-08-22
------------------
@ -138,6 +156,7 @@ Changelog
* Standardize on `solr` as the i18n domain.
[hannosch]
3.0a2 - 2011-07-10
------------------
@ -167,6 +186,7 @@ Changelog
its new ICU-based text field.
[hannosch]
3.0a1 - 2011-06-23
------------------
@ -214,6 +234,7 @@ Changes
* Updated example config to collective.recipe.solrinstance 3.1 and Solr 3.2.
[hannosch]
2.0 - 2011-06-04
----------------
@ -221,6 +242,7 @@ Changes
Solr works and how we integrate with it.
[hannosch]
2.0b2 - 2011-05-18
------------------
@ -238,6 +260,7 @@ Changes
* Avoid using the deprecated `five:implements` directive.
[hannosch]
2.0b1 - 2011-04-06
------------------

View File

@ -18,4 +18,4 @@ def path_depth(obj, **kwargs):
def path_parents(obj, **kwargs):
""" return all parent paths leading up to the object """
elements = obj.getPhysicalPath()
return ['/'.join(elements[:n+1]) for n in xrange(1, len(elements))]
return ['/'.join(elements[:n + 1]) for n in xrange(1, len(elements))]

View File

@ -78,7 +78,9 @@
factory=".vocabularies.SolrIndexes"
name="collective.solr.indexes" />
<utility factory=".vocabularies.I18NFacetTitlesVocabularyFactory" />
<utility
factory=".vocabularies.I18NFacetTitlesVocabularyFactory"
name="I18NFacetTitlesVocabularyFactory" />
<!-- Use the proper portal_types tool for type titles -->
<utility

View File

@ -19,6 +19,9 @@ class FlareContentListingObject(object):
def getObject(self):
return self.flare.getObject()
def getDataOrigin(self):
return self.flare.getObject()
def getPath(self):
return self.flare.getPath()
@ -32,7 +35,8 @@ class FlareContentListingObject(object):
return IUUID(self.getObject())
def getIcon(self):
return getMultiAdapter((self.getObject(), getRequest(), self.flare),
return getMultiAdapter(
(self.getObject(), getRequest(), self.flare),
interface=IContentIcon)()
def getSize(self):
@ -98,7 +102,8 @@ class FlareContentListingObject(object):
return self.flare.Type
def ContentTypeClass(self):
return "contenttype-" + getUtility(IIDNormalizer).normalize(self.PortalType())
return "contenttype-" + getUtility(IIDNormalizer).normalize(
self.PortalType())
def PortalType(self):
return self.flare.portal_type

View File

@ -80,7 +80,7 @@ def mangleQuery(keywords, config, schema):
simple_term = isSimpleTerm(value)
if pattern and isSimpleSearch(value):
base_value = value
if simple_term: # use prefix/wildcard search
if simple_term: # use prefix/wildcard search
value = '(%s* OR %s)' % (prepare_wildcard(value), value)
elif isWildCard(value):
value = prepare_wildcard(value)
@ -90,7 +90,7 @@ def mangleQuery(keywords, config, schema):
base_value=base_value)
keywords[key] = set([value]) # add literal query parameter
continue
elif simple_term: # use prefix/wildcard search
elif simple_term: # use prefix/wildcard search
keywords[key] = '(%s* OR %s)' % (
prepare_wildcard(value), value)
continue
@ -106,7 +106,15 @@ def mangleQuery(keywords, config, schema):
params = keywords['%s_parents' % key] = set()
for p in path:
base = len(p.split('/'))
params.add(tmpl % (key, base + (depth and 1), base + depth, key, p))
params.add(
tmpl % (
key,
base + (depth and 1),
base + depth,
key,
p
)
)
del args['depth']
elif key == 'effectiveRange':
if isinstance(value, DateTime):

View File

@ -95,7 +95,12 @@ class Search(object):
elif not value: # solr doesn't like empty fields (+foo:"")
if not name:
continue
logger.info('empty search term form "%s:%s", aborting buildQuery' % (name,value))
logger.info(
'empty search term form "%s:%s", aborting buildQuery' % (
name,
value
)
)
return {}
elif field.class_ == 'solr.BoolField':
if not isinstance(value, (tuple, list)):
@ -135,6 +140,11 @@ class Search(object):
value = '"%s"' % value
else:
value = quote(value)
# Solr 4.0 added regular expression support, which means
# that '/' is now a special character and must be escaped
# if searching for literal forward slash.
if '/' in value:
value = value.replace('/', '\/')
if not value: # don't search for empty strings, even quoted
continue
else:

View File

@ -768,7 +768,7 @@ class SolrServerTests(SolrTestCase):
self.assertEqual(search('Title', sort_on='Title',
sort_order='reverse'),
sorted([i['Title'] for i in first_level_objs], reverse=True))
required = [i['getId'] for i in sorted(first_level_objs,
required = [i['getId'] for i in sorted(first_level_objs,
key=itemgetter('Title'), reverse=True)]
self.assertEqual(search('getId', sort_on='Title',
sort_order='descending'), required)
@ -776,7 +776,7 @@ class SolrServerTests(SolrTestCase):
sorted([i['Title'] for i in first_level_objs])[:4] + ['?' for i in range(len(first_level_objs)-4)])
self.assertEqual(search('Title', sort_on='Title', sort_order='reverse',
sort_limit='3'),
sorted([i['Title'] for i in first_level_objs], reverse=True)[:3] +
sorted([i['Title'] for i in first_level_objs], reverse=True)[:3] +
['?' for i in range(len(first_level_objs)-3)])
# test sort index aliases
schema = self.search.getManager().getSchema()