Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
Zope
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
Zope
Commits
f58c1898
Commit
f58c1898
authored
Jul 29, 2002
by
Shane Hathaway
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added comments to demystify some of the search code.
parent
e86393d0
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
22 additions
and
10 deletions
+22
-10
lib/python/Products/ZCatalog/Catalog.py
lib/python/Products/ZCatalog/Catalog.py
+22
-10
No files found.
lib/python/Products/ZCatalog/Catalog.py
View file @
f58c1898
...
...
@@ -437,7 +437,7 @@ class Catalog(Persistent, Acquisition.Implicit, ExtensionClass.Base):
rs
=
None
# resultset
data
=
self
.
data
# Indexes fulfil a fairly large contract here. We hand each
# Indexes fulfil
l
a fairly large contract here. We hand each
# index the request mapping we are given (which may be composed
# of some combination of web request, kw mappings or plain old dicts)
# and the index decides what to do with it. If the index finds work
...
...
@@ -454,6 +454,14 @@ class Catalog(Persistent, Acquisition.Implicit, ExtensionClass.Base):
# Note that if the indexes find query arguments, but the end result
# is an empty sequence, we do nothing
# If sort_index is None, this method should pass sequences of
# catalog records to append(). The sequences will be concatenated
# together to generate the result set.
# If sort_index is not None, this method should instead pass pairs
# to append(), each pair containing a sort key and a sequence of
# catalog records.
# In either case, the sequences may be lazified.
if
used
is
None
:
used
=
{}
for
i
in
self
.
indexes
.
keys
():
...
...
@@ -479,8 +487,8 @@ class Catalog(Persistent, Acquisition.Implicit, ExtensionClass.Base):
else
:
self
.
_build_sorted_results
(
data
,
sort_index
,
append
)
elif
rs
:
# We got some results from the indexes
#
now we need to sort and lazify them
# We got some results from the indexes
.
#
Sort and convert to sequences.
if
sort_index
is
None
and
hasattr
(
rs
,
'values'
):
# having a 'values' means we have a data structure with
# scores. Build a new result set, sort it by score, reverse
...
...
@@ -515,10 +523,11 @@ class Catalog(Persistent, Acquisition.Implicit, ExtensionClass.Base):
else
:
# sort. If there are scores, then this block is not
# reached, therefore 'sort-on' does not happen in the
# context of text index query. This should probably
# context of
a
text index query. This should probably
# sort by relevance first, then the 'sort-on' attribute.
self
.
_build_sorted_results
(
rs
,
sort_index
,
append
)
#print 'ZCatalog search used', used.keys()
return
used
def
_build_sorted_results
(
self
,
rs
,
sort_index
,
append
):
...
...
@@ -537,16 +546,13 @@ class Catalog(Persistent, Acquisition.Implicit, ExtensionClass.Base):
_intersection
=
intersection
_self__getitem__
=
self
.
__getitem__
_None
=
None
if
(
(
len
(
rs
)
/
4
)
>
len
(
sort_index
)):
#
if the sorted index has a quarter as many keys as
#
the result set
if
(
len
(
rs
)
>
(
len
(
sort_index
)
*
4
)):
#
The result set is much larger than the sorted index,
#
so iterate over the sorted index for speed.
for
k
,
intset
in
sort_index
.
items
():
# We have an index that has a set of values for
# each sort key, so we interset with each set and
# get a sorted sequence of the intersections.
# This only makes sense if the number of
# keys is much less then the number of results.
intset
=
_intersection
(
rs
,
intset
)
if
intset
:
keys
=
getattr
(
intset
,
'keys'
,
_None
)
...
...
@@ -556,6 +562,7 @@ class Catalog(Persistent, Acquisition.Implicit, ExtensionClass.Base):
append
((
k
,
_lazymap
(
_self__getitem__
,
intset
)))
# Note that sort keys are unique.
else
:
# Iterate over the result set.
if
hasattr
(
rs
,
'keys'
):
rs
=
rs
.
keys
()
_sort_index_keyForDocument
=
sort_index
.
keyForDocument
...
...
@@ -620,6 +627,11 @@ class Catalog(Persistent, Acquisition.Implicit, ExtensionClass.Base):
return
LazyCat
(
r
)
# Sort/merge sub-results
# The contents of r depend on whether sort_index is set.
# If sort_index is None, r contains sequences of records.
# If sort_index is not None, r contains pairs of (sort_key, sequence)
# and now we have to sort the results.
if
len
(
r
)
==
1
:
if
sort_index
is
None
:
r
=
r
[
0
]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment