integrate search endpoint with ES
[akkoma] / lib / pleroma / elasticsearch / store.ex
1 defmodule Pleroma.Elasticsearch do
2 alias Pleroma.Activity
3 alias Pleroma.Elasticsearch.DocumentMappings
4
5 defp url do
6 Pleroma.Config.get([:elasticsearch, :url])
7 end
8
9 def put(%Activity{} = activity) do
10 Elastix.Document.index(
11 url(),
12 "activities",
13 "activity",
14 DocumentMappings.Activity.id(activity),
15 DocumentMappings.Activity.encode(activity)
16 )
17 end
18
19 def bulk_post(data, :activities) do
20 d = data
21 |> Enum.map(fn d ->
22 [
23 %{index: %{_id: DocumentMappings.Activity.id(d)}},
24 DocumentMappings.Activity.encode(d)
25 ]
26 end)
27 |> List.flatten()
28
29 Elastix.Bulk.post(
30 url(),
31 d,
32 index: "activities",
33 type: "activity"
34 )
35 end
36
37 def search(query) do
38 Elastix.Search.search(
39 url(),
40 "activities",
41 ["activity"],
42 %{query: %{term: %{content: query}}}
43 )
44 end
45 end