X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fpleroma%2Felasticsearch%2Fstore.ex;h=648bf1642de40afcd1b562bd376351c30d57bc25;hb=3252ed0f544bf5e1cc6d3e09bfa1a4866889ec91;hp=f8d9090d7f570a3db28b3bb057f48baeaf6c3d50;hpb=8378c3a8bcd1104a9329091f47a00e41e70a7a00;p=akkoma diff --git a/lib/pleroma/elasticsearch/store.ex b/lib/pleroma/elasticsearch/store.ex index f8d9090d7..648bf1642 100644 --- a/lib/pleroma/elasticsearch/store.ex +++ b/lib/pleroma/elasticsearch/store.ex @@ -1,6 +1,7 @@ defmodule Pleroma.Elasticsearch do alias Pleroma.Activity alias Pleroma.User + alias Pleroma.Object alias Pleroma.Elasticsearch.DocumentMappings alias Pleroma.Config require Logger @@ -13,6 +14,12 @@ defmodule Pleroma.Elasticsearch do Config.get([:search, :provider]) == Pleroma.Search.Elasticsearch end + def delete_by_id(:activity, id) do + if enabled?() do + Elastix.Document.delete(url(), "activities", "activity", id) + end + end + def put_by_id(:activity, id) do id |> Activity.get_by_id_with_object() @@ -35,7 +42,7 @@ defmodule Pleroma.Elasticsearch do end end - def maybe_put_into_elasticsearch(%User{} = user) do + def maybe_put_into_elasticsearch(%User{actor_type: "Person"} = user) do if enabled?() do put(user) end @@ -45,32 +52,50 @@ defmodule Pleroma.Elasticsearch do {:ok, :skipped} end + def maybe_bulk_post(data, type) do + if enabled?() do + bulk_post(data, type) + end + end + def put(%Activity{} = activity) do - {:ok, _} = - Elastix.Document.index( - url(), - "activities", - "activity", - DocumentMappings.Activity.id(activity), - DocumentMappings.Activity.encode(activity) - ) - - {:ok, _} = - bulk_post( - activity.object.hashtags, - :hashtags - ) + with {:ok, _} <- + Elastix.Document.index( + url(), + "activities", + "activity", + DocumentMappings.Activity.id(activity), + DocumentMappings.Activity.encode(activity) + ) do + activity + |> Map.get(:object) + |> Object.hashtags() + |> Enum.map(fn x -> + %{id: x, name: x, timestamp: DateTime.to_iso8601(DateTime.utc_now())} + end) + |> bulk_post(:hashtags) + else + {:error, %{reason: err}} -> + Logger.error("Could not put activity: #{err}") + :skipped + end end def put(%User{} = user) do - {:ok, _} = - Elastix.Document.index( - url(), - "users", - "user", - DocumentMappings.User.id(user), - DocumentMappings.User.encode(user) - ) + with {:ok, _} <- + Elastix.Document.index( + url(), + "users", + "user", + DocumentMappings.User.id(user), + DocumentMappings.User.encode(user) + ) do + :ok + else + {:error, %{reason: err}} -> + Logger.error("Could not put user: #{err}") + :skipped + end end def bulk_post(data, :activities) do @@ -92,13 +117,23 @@ defmodule Pleroma.Elasticsearch do end) |> List.flatten() - {:ok, %{body: %{"errors" => false}}} = - Elastix.Bulk.post( - url(), - d, - index: "activities", - type: "activity" - ) + with {:ok, %{body: %{"errors" => false}}} <- + Elastix.Bulk.post( + url(), + d, + index: "activities", + type: "activity" + ) do + :ok + else + {:error, %{reason: err}} -> + Logger.error("Could not bulk put activity: #{err}") + :skipped + + {:ok, %{body: body}} -> + IO.inspect(body) + :skipped + end end def bulk_post(data, :users) do @@ -113,15 +148,26 @@ defmodule Pleroma.Elasticsearch do end) |> List.flatten() - Elastix.Bulk.post( - url(), - d, - index: "users", - type: "user" - ) + with {:ok, %{body: %{"errors" => false}}} <- + Elastix.Bulk.post( + url(), + d, + index: "users", + type: "user" + ) do + :ok + else + {:error, %{reason: err}} -> + Logger.error("Could not bulk put users: #{err}") + :skipped + + {:ok, %{body: body}} -> + IO.inspect(body) + :skipped + end end - def bulk_post([] = data, :hashtags) do + def bulk_post(data, :hashtags) when is_list(data) do d = data |> Enum.map(fn d -> @@ -132,16 +178,29 @@ defmodule Pleroma.Elasticsearch do end) |> List.flatten() - Elastix.Bulk.post( - url(), - d, - index: "hashtags", - type: "hashtag" - ) + with {:ok, %{body: %{"errors" => false}}} <- + Elastix.Bulk.post( + url(), + d, + index: "hashtags", + type: "hashtag" + ) do + :ok + else + {:error, %{reason: err}} -> + Logger.error("Could not bulk put hashtags: #{err}") + :skipped + + {:ok, %{body: body}} -> + IO.inspect(body) + :skipped + end end def bulk_post(_, :hashtags), do: {:ok, nil} + def search(_, _, _, :skip), do: [] + def search(:raw, index, type, q) do with {:ok, raw_results} <- Elastix.Search.search(url(), index, [type], q) do results = @@ -163,6 +222,7 @@ defmodule Pleroma.Elasticsearch do results |> Enum.map(fn result -> result["_id"] end) |> Pleroma.Activity.all_by_ids_with_object() + |> Enum.sort(&(&1.inserted_at >= &2.inserted_at)) else e -> Logger.error(e)