philomena/lib/philomena/comments/elasticsearch_index.ex
liamwhite af9e779c59
Renaming (#112)
* First (not-yet-working) attempt at self-renaming

* Actually working renames

* last_renamed_at

* Prevent renaming while banned

* Move username changing from controller to model

* Username change logging

* Rate limiting for username changes

* username -> name and format

* add UBQ

* modify interval

Co-authored-by: Joey <joeyponi@gmail.com>
2020-05-02 18:17:55 -04:00

71 lines
1.8 KiB
Elixir

defmodule Philomena.Comments.ElasticsearchIndex do
@behaviour Philomena.ElasticsearchIndex
@impl true
def index_name do
"comments"
end
@impl true
def doc_type do
"comment"
end
@impl true
def mapping do
%{
settings: %{
index: %{
number_of_shards: 5,
max_result_window: 10_000_000
}
},
mappings: %{
comment: %{
_all: %{enabled: false},
dynamic: false,
properties: %{
id: %{type: "integer"},
posted_at: %{type: "date"},
ip: %{type: "ip"},
fingerprint: %{type: "keyword"},
image_id: %{type: "keyword"},
user_id: %{type: "keyword"},
author: %{type: "keyword"},
image_tag_ids: %{type: "keyword"},
# boolean
anonymous: %{type: "keyword"},
# boolean
hidden_from_users: %{type: "keyword"},
body: %{type: "text", analyzer: "snowball"}
}
}
}
}
end
@impl true
def as_json(comment) do
%{
id: comment.id,
posted_at: comment.created_at,
ip: comment.ip |> to_string,
fingerprint: comment.fingerprint,
image_id: comment.image_id,
user_id: comment.user_id,
author: if(!!comment.user and !comment.anonymous, do: comment.user.name),
image_tag_ids: comment.image.tags |> Enum.map(& &1.id),
anonymous: comment.anonymous,
hidden_from_users: comment.image.hidden_from_users || comment.hidden_from_users,
body: comment.body
}
end
def user_name_update_by_query(old_name, new_name) do
%{
query: %{term: %{author: old_name}},
replacements: [%{path: ["author"], old: old_name, new: new_name}],
set_replacements: []
}
end
end