You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by Apache Wiki <wi...@apache.org> on 2007/02/04 20:10:12 UTC
[Solr Wiki] Update of "UserTagDesign" by YonikSeeley
Dear Wiki user,
You have subscribed to a wiki page or wiki category on "Solr Wiki" for change notification.
The following page has been changed by YonikSeeley:
http://wiki.apache.org/solr/UserTagDesign
The comment on the change is:
user tagging design, usecases + flat schema
New page:
= User Tagging Design =
== Data Set ==
{{{
A10: title = Lucene in Action (LIA)
A11: title = Lucene in Action Deux
A12: title = Solr Flare in Action
A13: title = Practical Perl
erik tagged
A10 with "lucene"
A11 with "lucene","solr"
A12 with "ruby","solrflare"
A13 with
yonik tagged
A10 with
A11 with "lucene","solr","excellent"
A12 with "solr"
A13 with "foo"
}}}
== Use Cases ==
===== U-addUserTag =====
Allow a user to tag a book
* Example: Allow erik to tag A10 with "lucene"
===== U-delUserTag =====
Allow a user to remove a tag from a book, or all instances of a tag they have used.
===== U-delUser =====
Remove all tags that were added by a specific user
===== U-tagFacet =====
Show number of books tagged with each tag, restricted by users current search results and filters.
* Example: user submits a search of "title:lucene", and the resulting tag counts are "lucene(2), solr(2), excellent(1)"
Notice that the count is number of books with that tag, not the number of tags... there are 3 "lucene" tags on the books, but only 2 books are tagged "lucene".
===== U-userFacet =====
Show number of books tagged tagged by each user.
* Example: user submits a search of "title:lucene", and the resulting tag counts are "erik(2), yonik(1)"
Notice that the count is number of books tagged, not the number of tags on books.
===== U-tagSuggest =====
When a user is tagging a book, allow them to type in
the first few letters and then give a dropdown list of existing tags to
choose from. Sort by tag popularity, optionally show counts.
Tag popularity: number of users using that tag, or number of books
with that tag? Either could work if neccesary,
* Example1: user types in "so" into the textbox when tagging a book, and
they are automatically shown "solr(2), solrflare(1)" (uses #books tagged)
* Example2: user types in "so" into the textbox when tagging a book, and
they are automatically shown "solr(3), solrflare(1)" (uses #tag instances)
===== U-tagNarrow =====
User selects an existing tag to narrow their search results by.
Any displayed results (including facet counts) must have all tags that
have been selected by the user.
* Example: narrow search results by the tag "solr"
===== U-userTagNarrow =====
Show all books a specific user tagged with a specific tag, or restrict search results by the same.
* Example: restrict matches to books with erik's "solr" tag => restricts to A11
===== U-tagNarrowSuggest =====
Allow the user to narrow their search results by typing in
a tag instead of selecting it from a list. When the user has typed
one or two letters, automatically pop up a list of tags starting
with that prefix. Optionally sort tags by number of books it applies to
in the current search results.
* Example: search "title:lucene", user types "so" and is presented with solr(1)
===== U-userNarrow =====
Restrict books to those tagged by a specific user.
* Example: search "title:*" restrict to books tagged by erik => A10,A11,A12
* Example2: search "title:*", facet by tag, restrict to books tagged by erik:
facet counts={lucene(2),solr(2),ruby(1),solrflare(1),excellent(1)}
(note that this does *not* restrict shown tag counts to erik's tags)
===== U-userTagsNarrow =====
Restrict *tags* to those of a specific user.
* Example: search "lucene", facet by tag, restrict to erik's tags:
facet counts={lucene(2),solr(1)}
===== U-userNarrowMulti =====
Restrict books to those tagged by a specific users.
* Example: search "title:*" restrict to books tagged by erik or yonik => A10,A11,A12,A13
* Example2: search "title:*" restrict to books tagged by erik and yonik => A10,A11,A12
===== U-tagRelevance =====
When searching for a specific tag, increase the
relevance of books that have more instances of that tag.
* Example: search for tag "lucene" and show A11 before A10
===== U-tagTimeliness =====
Restrict to tags added in the last year (or time period)
===== Machine Tags or Triple Tags =====
http://www.flickr.com/groups/api/discuss/72157594497877875
===== Tag Hierarchies =====
== Implementations ==
=== Flat Schema #1 ===
Add tags directly to the documents.
===== U-addUserTag =====
{{{
add to A10, field utag="~erik#lucene" // single token
add to A10, field utag2="~erik #lucene // tokenized by whitespace
}}}
utag2 could be added via copyField
===== U-delUserTag =====
remove A10.utag="~erik#lucene"
===== U-delUser =====
q="utag:~erik*", get set of documents, remove all tags starting with ~erik
===== U-tagFacet =====
q="title:lucene" facet.field=utag2 facet.prefix=#
===== U-userFacet =====
q="title:lucene" facet.field=utag2 facet.prefix=~
===== U-tagSuggest =====
* Example1: facet.field=utag2 facet.prefix=#so
* Example2: not easily doable... would require more work within solr to count up tf's
===== U-tagNarrow =====
fq=utag2:#solr
===== U-userTagNarrow =====
* fq=utag:~erik#solr
* OR fq="utag2:"~erik #solr"
===== U-tagNarrowSuggest =====
q=title:lucene facet.field=utag2 facet.prefix=#so
===== U-userNarrow =====
q=title:* fq=utag2:~erik
===== U-userTagsNarrow =====
q=lucene fq=utag2:~erik facet.field=utag facet.prefix=~erik
===== U-userNarrowMulti =====
* Example: q=title:* fq=utag2:(~erik OR ~yonik)
* Example2: q=title:* fq=utag2:(+~erik +~yonik)
===== U-tagRelevance =====
q=utag2:#lucene
===== U-tagTimeliness =====
??? reserve another prefix for fields like time