defmodule Pleroma.Elasticsearch do
alias Pleroma.Activity
alias Pleroma.Elasticsearch.DocumentMappings
+ alias Pleroma.Config
defp url do
- Pleroma.Config.get([:elasticsearch, :url])
+ Config.get([:elasticsearch, :url])
+ end
+
+ def put_by_id(id) do
+ id
+ |> Activity.get_by_id_with_object()
+ |> maybe_put_into_elasticsearch()
+ end
+
+ def maybe_put_into_elasticsearch({:ok, activity}) do
+ maybe_put_into_elasticsearch(activity)
+ end
+
+ def maybe_put_into_elasticsearch(%{data: %{"type" => "Create"}, object: %{data: %{"type" => "Note"}}} = activity) do
+ if Config.get([:search, :provider]) == Pleroma.Search.Elasticsearch do
+ actor = Pleroma.Activity.user_actor(activity)
+
+ activity
+ |> Map.put(:user_actor, actor)
+ |> put()
+ end
+ end
+
+ def maybe_put_into_elasticsearch(_) do
+ {:ok, :skipped}
end
def put(%Activity{} = activity) do
Elastix.Document.index(
- url(),
- "activities",
- "activity",
- DocumentMappings.Activity.id(activity),
- DocumentMappings.Activity.encode(activity)
+ url(),
+ "activities",
+ "activity",
+ DocumentMappings.Activity.id(activity),
+ DocumentMappings.Activity.encode(activity)
)
end
def bulk_post(data, :activities) do
- d = data
- |> Enum.map(fn d ->
+ d =
+ data
+ |> Enum.map(fn d ->
[
- %{index: %{_id: DocumentMappings.Activity.id(d)}},
- DocumentMappings.Activity.encode(d)
+ %{index: %{_id: DocumentMappings.Activity.id(d)}},
+ DocumentMappings.Activity.encode(d)
]
- end)
- |> List.flatten()
+ end)
+ |> List.flatten()
Elastix.Bulk.post(
- url(),
- d,
- index: "activities",
- type: "activity"
+ url(),
+ d,
+ index: "activities",
+ type: "activity"
)
end
- def search(query) do
+ def search_activities(q) do
Elastix.Search.search(
- url(),
- "activities",
- ["activity"],
- %{query: %{term: %{content: query}}}
+ url(),
+ "activities",
+ ["activity"],
+ q
)
end
end