Commit Graph

80 Commits

Author SHA1 Message Date
evazion
6dd331745a Rewrite related tags implementation.
Rewrite the implementation of related tags to be simpler, faster, and
more accurate:

* The related tags are now calculated by taking a random sample of 1000
  posts, finding the top 250 most frequent tags among those posts, then
  ordering those tags by cosine similarity.

* Related tags can generally be calculated in 50-300ms at these sample
  sizes. Very high sample sizes (25000+ posts) are still relatively fast
  (1-3 seconds), but generally they don't improve accuracy much.

* Related tags are now cached in redis rather than in the tags table.
  The related_tags column in the tags table is no longer used.

* Only the related tags in the search taglist are cached. The related
  tags returned by the 'Related tags' button are not cached.

* The cache lifetime is a fixed 4 hours.

* The 'Related tags' button now works with metatags.

* The /related_tag page now works with metatags and multitag searches.

Fixes #4134, #4146.
2019-08-30 20:03:36 -05:00
evazion
d73895312e Avoid swallowing exceptions unnecessarily. 2019-08-29 00:51:52 -05:00
evazion
bda69315ff search: optimize related tag calc in multi-tag searches (#4120).
In multi-tag searches, we calculated the tags in the sidebar by sampling
300 random posts from within the search and finding the most frequently
used tags. This meant we were effectively doing two searches on every
page load, one for the actual search and one for the sidebar. This is
not so bad for fast searches, but very bad for slow searches.

Instead, now we calculate the related tags from the current page of
results. This is much faster, at the cost of slightly lower accuracy and
the tag list changing slightly as you browse between pages.

We could use caching here, which would help when browsing between pages,
but we would still have to calculate the tags on the first page load,
which can be very slow in the worst case.
2019-08-12 13:38:45 -05:00
evazion
6d171f44c4 pools/show: remove unused related tags calculation. 2019-08-09 00:05:50 -05:00
evazion
7478c7a913 Fix #4034: Several keyboard shortcuts are missing an ID. 2019-01-03 17:19:16 -06:00
Albert Yi
0508b127fd continue refactoring savedsearch 2018-11-15 12:06:13 -08:00
Albert Yi
8515bf43b4 make popular tags for order:rank higher priority in list 2018-11-07 16:30:14 -08:00
evazion
bd0bb658b8 Fix #3974: Pool galleries: link thumbnails to pools instead of posts. 2018-11-06 14:33:04 -06:00
Albert Yi
08da9e7104 show popular tags when showing order:rank 2018-11-02 16:18:53 -07:00
evazion
99632d5e8a TagSetPresenter: refactor to pass options explicitly.
Refactor tag_list_html, split_tag_list_html, and inline_tag_list_html to
take the `show_extra_links` and `current_query` options explicitly,
rather than implicitly relying on CurrentUser or taking `params[:tags]`
from the template.
2018-09-30 21:52:24 -05:00
evazion
29cdaddd86 PostSetPresenters::Post#related_posts: clean up metatag parsing (#2894).
* Fix `#related_tags` to use `Tag.has_metatag?`.
* Fix Tag::SUBQUERY_METATAGS and Tag::METATAGS to be arrays instead of regexes.
2018-09-20 19:23:47 -05:00
evazion
bbaadda1e3 Convert keyboard shortcuts to use data-shortcut. 2018-08-12 12:09:58 -05:00
Albert Yi
a610111658 switch post previews to use flexbox, add better styling for cropped thumbnails 2018-07-18 11:38:00 -07:00
Albert Yi
64446d49e1 add image cropping support 2018-06-22 14:41:57 -07:00
r888888888
abce4d2551 Raise error on unpermitted params.
Fail loudly if we forget to whitelist a param instead of silently
ignoring it.

misc models: convert to strong params.

artist commentaries: convert to strong params.

* Disallow changing or setting post_id to a nonexistent post.

artists: convert to strong params.

* Disallow setting `is_banned` in create/update actions. Changing it
  this way instead of with the ban/unban actions would leave the artist in
  a partially banned state.

bans: convert to strong params.

* Disallow changing the user_id after the ban has been created.

comments: convert to strong params.

favorite groups: convert to strong params.

news updates: convert to strong params.

post appeals: convert to strong params.

post flags: convert to strong params.

* Disallow users from setting the `is_deleted` / `is_resolved` flags.

ip bans: convert to strong params.

user feedbacks: convert to strong params.

* Disallow users from setting `disable_dmail_notification` when creating feedbacks.
* Disallow changing the user_id after the feedback has been created.

notes: convert to strong params.

wiki pages: convert to strong params.

* Also fix non-Builders being able to delete wiki pages.

saved searches: convert to strong params.

pools: convert to strong params.

* Disallow setting `post_count` or `is_deleted` in create/update actions.

janitor trials: convert to strong params.

post disapprovals: convert to strong params.

* Factor out quick-mod bar to shared partial.
* Fix quick-mod bar to use `Post#is_approvable?` to determine visibility
  of Approve button.

dmail filters: convert to strong params.

password resets: convert to strong params.

user name change requests: convert to strong params.

posts: convert to strong params.

users: convert to strong params.

* Disallow setting password_hash, last_logged_in_at, last_forum_read_at,
  has_mail, and dmail_filter_attributes[user_id].

* Remove initialize_default_image_size (dead code).

uploads: convert to strong params.

* Remove `initialize_status` because status already defaults to pending
  in the database.

tag aliases/implications: convert to strong params.

tags: convert to strong params.

forum posts: convert to strong params.

* Disallow changing the topic_id after creating the post.
* Disallow setting is_deleted (destroy/undelete actions should be used instead).
* Remove is_sticky / is_locked (nonexistent attributes).

forum topics: convert to strong params.

* merges https://github.com/evazion/danbooru/tree/wip-rails-5.1
* lock pg gem to 0.21 (1.0.0 is incompatible with rails 5.1.4)
* switch to factorybot and change all references

Co-authored-by: r888888888 <r888888888@gmail.com>
Co-authored-by: evazion <noizave@gmail.com>

add diffs
2018-04-06 18:09:57 -07:00
r888888888
3657cacd17 * post keeper is calculated synchronously
* add fallback mechanism in case archive service is not up
* pass along most recently added tags to any keeper calculation
2018-03-08 16:00:44 -08:00
r888888888
8b1fca4662 add most viewed posts page 2017-11-10 16:21:01 -08:00
r888888888
8458c62e8a eliminate month scale for popular searches (takes up too much space in redis) 2017-11-10 15:40:10 -08:00
r888888888
3b414db844 defer to popular searches for popular tag list 2017-05-01 17:56:34 -07:00
evazion
8404064854 related_tag_calculator.rb: fix memcache lookup in inner loop.
Remove the category constraint option from RelatedTagCalculator.calculate_from_posts.
It slows things down and isn't used.

This method is used to calculate the related tags sidebar during
searches for single metatags. Using Tag.category_for in the inner loop
caused a memcache call on every iteration. At 100 posts per page and
20-30 tags per post, this led to up to 2000-3000 total memcache calls,
which significantly slowed pageloads.
2017-04-23 17:10:20 -05:00
r888888888
97da8f8647 deprecate tag subscriptions with warnings 2017-04-14 16:00:20 -07:00
r888888888
da06bee0ab revamp saved search implementation 2017-03-15 15:36:48 -07:00
r888888888
8a93fdf18f additional saved search fixes 2017-01-25 12:48:47 -08:00
r888888888
c7b5a4e229 add references to user statistics page about saved searches 2017-01-23 10:56:39 -08:00
Toks
8a9488df94 Fix deleted posts not showing in favgroups 2015-09-07 19:49:30 -04:00
r888888888
86f0db5912 fixes #2488: Pool gallery has pools missing from the list 2015-08-13 11:46:09 -07:00
r888888888
f87c71cf23 remove post view counts, add search counts 2015-07-27 17:27:40 -07:00
r888888888
cc6da3ff89 fixes #2454: Add a new popular posts page for view counts 2015-07-24 15:56:41 -07:00
Toks
04fa5596e2 Favorite groups 2015-06-23 15:25:54 -04:00
r888888888
5c22d8753f Revert "make pool gallery the default view"
This reverts commit 719343cea5.
2014-09-05 22:26:47 -07:00
r888888888
719343cea5 make pool gallery the default view 2014-09-05 16:27:19 -07:00
r888888888
267df896c6 fixes #2245 2014-08-25 16:41:27 -07:00
r888888888
a89c57cee0 Fix Rails 4.1 migration issues 2014-04-24 17:01:03 -07:00
Toks
ace1975704 #1140: Remove order metatag when picking reltag method 2013-12-09 12:43:27 -05:00
Toks
9f1df439a6 #1140: Use fast reltag calculation for subquery metatags 2013-12-09 12:14:56 -05:00
r888888888
016fccbf0a refactor 2013-11-20 16:56:59 -08:00
r888888888
231993b98e fixes #2005 2013-11-20 15:45:03 -08:00
r888888888
c0921d0590 fixes #1891 2013-07-24 18:12:44 -07:00
r888888888
3bc4c886c3 tweak styles for intro page 2013-06-24 15:32:17 -07:00
r888888888
ec56d7abc9 default tag listing now weighted by time 2013-06-24 15:08:42 -07:00
Toks
9f3cbf7bf5 fixes #1799 2013-06-23 18:24:13 -04:00
Toks
317dee767d better fix for #1253 2013-06-20 19:05:08 -04:00
Toks
299fc1057e fix wiki page errors 2013-05-11 08:37:00 -04:00
Toks
0ced0ca659 fix 2013-05-11 07:28:42 -04:00
Toks
bbd3ac1867 separate post previews html with linebreaks 2013-05-10 23:22:04 -04:00
Toks
eaf016921d Revert "fixes #1286"
This reverts commit 799fc6223f.
2013-05-10 15:45:48 -04:00
Toks
799fc6223f fixes #1286 2013-05-07 21:50:49 -04:00
r888888888
5706a8e488 fix tests (involves changes to favorite set presenter) 2013-04-28 00:55:10 -07:00
Toks
4001689e28 fixes #1450
Additionally:
* Adds basic negated id metatag.
* Post set presenter now uses the post set's tag string, not the
parameter from the URL.
2013-04-27 11:13:57 -04:00
albert
ce7d6bc0dd disable Tag.find_or_create_by_name for single tag queries with no matching tag record 2013-03-31 18:27:32 -04:00