Browse Source

Ensure only indexing public posts and implement clearing and delete

merge-requests/3529/head
Ekaterina Vaartis 2 years ago
parent
commit
5861b029ca
4 changed files with 38 additions and 2 deletions
  1. +14
    -1
      lib/mix/tasks/pleroma/search/meilisearch.ex
  2. +1
    -0
      lib/pleroma/activity.ex
  3. +16
    -1
      lib/pleroma/search/meilisearch.ex
  4. +7
    -0
      lib/pleroma/web/common_api.ex

+ 14
- 1
lib/mix/tasks/pleroma/search/meilisearch.ex View File

@@ -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

+ 1
- 0
lib/pleroma/activity.ex View File

@@ -371,6 +371,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


+ 16
- 1
lib/pleroma/search/meilisearch.ex View File

@@ -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

+ 7
- 0
lib/pleroma/web/common_api.ex View File

@@ -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…
Cancel
Save