113 lines
2.5 KiB
Ruby
113 lines
2.5 KiB
Ruby
class BookmarkIndexer < Indexer
|
|
|
|
def self.klass
|
|
"Bookmark"
|
|
end
|
|
|
|
# Create the bookmarkable index/mapping first
|
|
# Skip delete on the subclasses so it doesn't delete the ones we've just
|
|
# reindexed
|
|
def self.index_all(options = {})
|
|
unless options[:skip_delete]
|
|
options[:skip_delete] = true
|
|
BookmarkableIndexer.delete_index
|
|
BookmarkableIndexer.create_index(shards: ArchiveConfig.BOOKMARKABLE_SHARDS)
|
|
create_mapping
|
|
end
|
|
BookmarkedExternalWorkIndexer.index_all(skip_delete: true)
|
|
BookmarkedSeriesIndexer.index_all(skip_delete: true)
|
|
BookmarkedWorkIndexer.index_all(skip_delete: true)
|
|
super
|
|
end
|
|
|
|
def self.mapping
|
|
{
|
|
properties: {
|
|
bookmarkable_join: {
|
|
type: "join",
|
|
relations: {
|
|
bookmarkable: "bookmark"
|
|
}
|
|
},
|
|
title: {
|
|
type: "text",
|
|
analyzer: "simple"
|
|
},
|
|
creators: {
|
|
type: "text",
|
|
analyzer: "standard"
|
|
},
|
|
work_types: {
|
|
type: "keyword"
|
|
},
|
|
bookmarkable_type: {
|
|
type: "keyword"
|
|
},
|
|
bookmarker: {
|
|
type: "text",
|
|
analyzer: "standard"
|
|
},
|
|
tag: {
|
|
type: "text",
|
|
analyzer: "simple"
|
|
},
|
|
sort_id: {
|
|
type: "keyword"
|
|
}
|
|
}
|
|
}
|
|
end
|
|
|
|
####################
|
|
# INSTANCE METHODS
|
|
####################
|
|
|
|
def routing_info(id)
|
|
object = objects[id.to_i]
|
|
{
|
|
"_index" => index_name,
|
|
"_id" => id,
|
|
"routing" => parent_id(id, object)
|
|
}
|
|
end
|
|
|
|
def parent_id(id, object)
|
|
if object.nil?
|
|
deleted_bookmark_info(id)
|
|
else
|
|
"#{object.bookmarkable_id}-#{object.bookmarkable_type.underscore}"
|
|
end
|
|
end
|
|
|
|
def document(object)
|
|
tags = object.tags
|
|
json_object = object.as_json(
|
|
root: false,
|
|
only: [
|
|
:id, :created_at, :bookmarkable_type, :bookmarkable_id,
|
|
:private, :updated_at, :hidden_by_admin, :pseud_id, :rec
|
|
],
|
|
methods: [:bookmarker, :collection_ids, :with_notes, :bookmarkable_date]
|
|
).merge(
|
|
user_id: object.pseud&.user_id,
|
|
tag: tags.map(&:name),
|
|
tag_ids: tags.map(&:id),
|
|
notes: object.bookmarker_notes
|
|
)
|
|
|
|
unless parent_id(object.id, object).match("deleted")
|
|
json_object.merge!(
|
|
bookmarkable_join: {
|
|
name: "bookmark",
|
|
parent: parent_id(object.id, object)
|
|
}
|
|
)
|
|
end
|
|
|
|
json_object
|
|
end
|
|
|
|
def deleted_bookmark_info(id)
|
|
REDIS_GENERAL.get("deleted_bookmark_parent_#{id}")
|
|
end
|
|
end
|