Merge lp:~kamstrup/zeitgeist/query-expansion into lp:zeitgeist/0.1
Status: | Merged |
---|---|
Merge reported by: | Mikkel Kamstrup Erlandsen |
Merged at revision: | not available |
Proposed branch: | lp:~kamstrup/zeitgeist/query-expansion |
Merge into: | lp:zeitgeist/0.1 |
Diff against target: |
323 lines (+218/-15) 4 files modified
_zeitgeist/engine/main.py (+47/-11) test/datamodel-test.py (+52/-0) test/test-sql.py (+51/-0) zeitgeist/datamodel.py (+68/-4) |
To merge this branch: | bzr merge lp:~kamstrup/zeitgeist/query-expansion |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Markus Korn | Needs Fixing | ||
Review via email: mp+25000@code.launchpad.net |
Description of the change
Huzzah! Smackeroo! I have query expansion fully working now all unit tests passing. Both on the SQL level and on our template matching level.
So what does "query expansion" mean. Consider a query for subject with interp. nfo:Media. Right that would only match stuff that has been explicitly identified as nfo:Media (which is not much since we usually can identify whther stuff is Audio, Image, or Video data).
With query expansion we'll also match any children of nfo:Media. Ie also nfo:Image, nfo:Audio, and nfo:Video. Also recursively matching children of these like nfo:RasterImage and nfo:Vector image.
The way it's implemented is really simple. We simply expand the tree of children and compile a big OR query with everything.
Hey Mikkel,
thanks you for your works, it is working fine for me.
Feel free to merge this branch into lp:zeitgeist once you thought about my three comments ;)
Markus
> === modified file '_zeitgeist/ engine/ main.py' engine/ main.py 2010-05-03 16:32:00 +0000 engine/ main.py 2010-05-12 19:32:33 +0000 for_now, Interpretation for_now, Interpretation, Symbol engine. datamodel import Event, Subject engine. extension import ExtensionsColle ction, load_class templates( templates) : WhereClause. AND) event_template, key) subject_ template, key) add("subj_ %s = ?" % key, WhereClause. OR) find_child_ uris_extended( event_template. interpretation) ): where.add( "interpretation = ?", ation.id( child_interp) ) extend( event_interp_ where) WhereClause. OR) find_child_ uris_extended( event_template. manifestation) ): where.add( "manifestation = ?", tion.id( child_manif) ) extend( event_manif_ where)
> --- _zeitgeist/
> +++ _zeitgeist/
> @@ -32,7 +32,7 @@
> from collections import defaultdict
>
> from zeitgeist.datamodel import Event as OrigEvent, StorageState, TimeRange, \
> - ResultType, get_timestamp_
> + ResultType, get_timestamp_
> from _zeitgeist.
> from _zeitgeist.
> from _zeitgeist.engine import constants
> @@ -163,16 +163,51 @@
> for (event_template, subject_template) in self._build_
> subwhere = WhereClause(
> try:
> - for key in ("interpretation", "manifestation", "actor"):
> - value = getattr(
> - if value:
> - subwhere.add("%s = ?" % key,
> - getattr(self, "_" + key).id(value))
> - for key in ("interpretation", "manifestation", "mimetype"):
> - value = getattr(
> - if value:
> - subwhere.
> - getattr(self, "_" + key).id(value))
> + # Expand event interpretation children
> + event_interp_where = WhereClause(
> + for child_interp in
> (Symbol.
> + if child_interp:
> + event_interp_
> + self._interpret
> + if event_interp_where:
> + subwhere.
> +
> + # Expand event manifestation children
> + event_manif_where = WhereClause(
> + for child_manif in
> (Symbol.
> + if child_manif:
> + event_manif_
> + self._manifesta
> + if event_manif_where:
> + subwhere.
> +
> + # Expand subjec...