fix bug in inbound
[akkoma] / lib / pleroma / elasticsearch / store.ex
1 defmodule Pleroma.Elasticsearch do
2 alias Pleroma.Activity
3 alias Pleroma.Elasticsearch.DocumentMappings
4 alias Pleroma.Config
5
6 defp url do
7 Config.get([:elasticsearch, :url])
8 end
9
10 def put_by_id(id) do
11 id
12 |> Activity.get_by_id_with_object()
13 |> maybe_put_into_elasticsearch()
14 end
15
16 def maybe_put_into_elasticsearch({:ok, activity}) do
17 maybe_put_into_elasticsearch(activity)
18 end
19
20 def maybe_put_into_elasticsearch(%{data: %{"type" => "Create"}, object: %{data: %{type: "Note"}}} = activity) do
21 if Config.get([:search, :provider]) == Pleroma.Search.Elasticsearch do
22 actor = Pleroma.Activity.user_actor(activity)
23
24 activity
25 |> Map.put(:user_actor, actor)
26 |> put()
27 end
28 end
29
30 def maybe_put_into_elasticsearch(_) do
31 {:ok, :skipped}
32 end
33
34 def put(%Activity{} = activity) do
35 Elastix.Document.index(
36 url(),
37 "activities",
38 "activity",
39 DocumentMappings.Activity.id(activity),
40 DocumentMappings.Activity.encode(activity)
41 )
42 end
43
44 def bulk_post(data, :activities) do
45 d =
46 data
47 |> Enum.map(fn d ->
48 [
49 %{index: %{_id: DocumentMappings.Activity.id(d)}},
50 DocumentMappings.Activity.encode(d)
51 ]
52 end)
53 |> List.flatten()
54
55 Elastix.Bulk.post(
56 url(),
57 d,
58 index: "activities",
59 type: "activity"
60 )
61 end
62
63 def search_activities(q) do
64 Elastix.Search.search(
65 url(),
66 "activities",
67 ["activity"],
68 q
69 )
70 end
71 end