1 defmodule Pleroma.Elasticsearch do
3 alias Pleroma.Elasticsearch.DocumentMappings
6 "hashtag", "instance", "user"
10 Pleroma.Config.get([:elasticsearch, :url])
13 def put(%Activity{} = activity) do
14 Elastix.Document.index(
18 DocumentMappings.Activity.id(activity),
19 DocumentMappings.Activity.encode(activity)
23 def bulk_post(data, :activities) do
27 %{index: %{_id: DocumentMappings.Activity.id(d)}},
28 DocumentMappings.Activity.encode(d)
42 if String.contains?(t, ":") and !String.starts_with?(t, "\"") do
43 [field, query] = String.split(t, ":")
44 if Enum.member?(@searchable, field) do
54 defp search_user(params, q) do
55 if q["user"] != nil do
56 params ++ [%{match: %{user: %{
57 query: Enum.join(q["user"], " "),
65 defp search_instance(params, q) do
66 if q["instance"] != nil do
67 params ++ [%{match: %{instance: %{
68 query: Enum.join(q["instance"], " "),
76 defp search_content(params, q) do
77 if q["content"] != nil do
78 params ++ [%{match: %{content: %{
79 query: Enum.join(q["content"], " "),
95 String.split(query, " ")
96 |> Enum.map(&parse_term/1)
97 |> Enum.reduce(%{}, fn {field, query}, acc ->
99 Map.get(acc, field, []) ++ [query]
112 Elastix.Search.search(