Ensure only indexing public posts and implement clearing and delete
This commit is contained in:
parent
41db5c8653
commit
e5ac2ffa07
4 changed files with 38 additions and 2 deletions
|
@ -4,6 +4,7 @@
|
|||
|
||||
defmodule Mix.Tasks.Pleroma.Search.Meilisearch do
|
||||
require Logger
|
||||
require Pleroma.Constants
|
||||
|
||||
import Mix.Pleroma
|
||||
import Ecto.Query
|
||||
|
@ -29,7 +30,11 @@ defmodule Mix.Tasks.Pleroma.Search.Meilisearch do
|
|||
|
||||
Pleroma.Repo.chunk_stream(
|
||||
from(Pleroma.Object,
|
||||
where: fragment("data->>'type' = 'Note'") and fragment("LENGTH(data->>'source') > 0")
|
||||
# Only index public posts which are notes and have some text
|
||||
where:
|
||||
fragment("data->>'type' = 'Note'") and
|
||||
fragment("LENGTH(data->>'source') > 0") and
|
||||
fragment("data->'to' \\? ?", ^Pleroma.Constants.as_public())
|
||||
),
|
||||
200,
|
||||
:batches
|
||||
|
@ -51,4 +56,12 @@ defmodule Mix.Tasks.Pleroma.Search.Meilisearch do
|
|||
end)
|
||||
|> Stream.run()
|
||||
end
|
||||
|
||||
def run(["clear"]) do
|
||||
start_pleroma()
|
||||
|
||||
endpoint = Pleroma.Config.get([Pleroma.Search.Meilisearch, :url])
|
||||
|
||||
{:ok, _} = Pleroma.HTTP.request(:delete, "#{endpoint}/indexes/objects/documents", "", [], [])
|
||||
end
|
||||
end
|
||||
|
|
|
@ -369,6 +369,7 @@ defmodule Pleroma.Activity do
|
|||
|
||||
defdelegate search(user, query, options \\ []), to: Pleroma.Activity.Search
|
||||
def add_to_index(_activity), do: nil
|
||||
def remove_from_index(_object), do: nil
|
||||
|
||||
def direct_conversation_id(activity, for_user) do
|
||||
alias Pleroma.Conversation.Participation
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
defmodule Pleroma.Search.Meilisearch do
|
||||
require Logger
|
||||
require Pleroma.Constants
|
||||
|
||||
alias Pleroma.Activity
|
||||
|
||||
|
@ -41,7 +42,8 @@ defmodule Pleroma.Search.Meilisearch do
|
|||
def add_to_index(activity) do
|
||||
object = activity.object
|
||||
|
||||
if activity.data["type"] == "Create" and not is_nil(object) and object.data["type"] == "Note" do
|
||||
if activity.data["type"] == "Create" and not is_nil(object) and object.data["type"] == "Note" and
|
||||
Pleroma.Constants.as_public() in object.data["to"] do
|
||||
data = object.data
|
||||
|
||||
endpoint = Pleroma.Config.get([Pleroma.Search.Meilisearch, :url])
|
||||
|
@ -57,4 +59,17 @@ defmodule Pleroma.Search.Meilisearch do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
def remove_from_index(object) do
|
||||
endpoint = Pleroma.Config.get([Pleroma.Search.Meilisearch, :url])
|
||||
|
||||
{:ok, _} =
|
||||
Pleroma.HTTP.request(
|
||||
:delete,
|
||||
"#{endpoint}/indexes/objects/documents/#{object.id}",
|
||||
"",
|
||||
[],
|
||||
[]
|
||||
)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -146,6 +146,13 @@ defmodule Pleroma.Web.CommonAPI do
|
|||
true <- User.superuser?(user) || user.ap_id == object.data["actor"],
|
||||
{:ok, delete_data, _} <- Builder.delete(user, object.data["id"]),
|
||||
{:ok, delete, _} <- Pipeline.common_pipeline(delete_data, local: true) do
|
||||
# Also delete from search index
|
||||
search_module = Pleroma.Config.get([Pleroma.Search, :module])
|
||||
|
||||
ConcurrentLimiter.limit(Pleroma.Search, fn ->
|
||||
Task.start(fn -> search_module.remove_from_index(object) end)
|
||||
end)
|
||||
|
||||
{:ok, delete}
|
||||
else
|
||||
{:find_activity, _} ->
|
||||
|
|
Loading…
Reference in a new issue