X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Fmastodon_api%2Fcontrollers%2Fsearch_controller.ex;h=484a959afcbc4ef7b8d7876631d0a7b9c5e25e9e;hb=3478492945d7069545593cc0e6e6b9e536ddb489;hp=0043c3a5622d1b230534dc66db170556a4500d2b;hpb=78cea44553c936813ffc2c4c47984a64255096ef;p=akkoma
diff --git a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex
index 0043c3a56..484a959af 100644
--- a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex
+++ b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex
@@ -1,5 +1,5 @@
# Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors
+# Copyright © 2017-2021 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.MastodonAPI.SearchController do
@@ -8,8 +8,8 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do
alias Pleroma.Activity
alias Pleroma.Repo
alias Pleroma.User
- alias Pleroma.Web
alias Pleroma.Web.ControllerHelper
+ alias Pleroma.Web.Endpoint
alias Pleroma.Web.MastodonAPI.AccountView
alias Pleroma.Web.MastodonAPI.StatusView
alias Pleroma.Web.Plugs.OAuthScopesPlug
@@ -45,6 +45,43 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do
defp do_search(version, %{assigns: %{user: user}} = conn, %{q: query} = params) do
query = String.trim(query)
+ options = search_options(params, user)
+ if Pleroma.Config.get([:search, :provider]) == :elasticsearch do
+ elasticsearch_search(conn, query, options)
+ else
+ builtin_search(version, conn, params)
+ end
+ end
+
+ defp elasticsearch_search(%{assigns: %{user: user}} = conn, query, options) do
+ with {:ok, raw_results} <- Pleroma.Elasticsearch.search(query) do
+ results = raw_results
+ |> Map.get(:body)
+ |> Map.get("hits")
+ |> Map.get("hits")
+ |> Enum.map(fn result -> result["_id"] end)
+ |> Pleroma.Activity.all_by_ids_with_object()
+
+ json(
+ conn,
+ %{
+ accounts: [],
+ hashtags: [],
+ statuses: StatusView.render("index.json",
+ activities: results,
+ for: user,
+ as: :activity
+ )}
+ )
+ else
+ {:error, _} ->
+ conn
+ |> put_status(:internal_server_error)
+ |> json(%{error: "Search failed"})
+ end
+ end
+
+ defp builtin_search(version, %{assigns: %{user: user}} = conn, %{q: query} = params) do
options = search_options(params, user)
timeout = Keyword.get(Repo.config(), :timeout, 15_000)
default_values = %{"statuses" => [], "accounts" => [], "hashtags" => []}
@@ -108,7 +145,7 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do
end
defp resource_search(:v2, "hashtags", query, options) do
- tags_path = Web.base_url() <> "/tag/"
+ tags_path = Endpoint.url() <> "/tag/"
query
|> prepare_tags(options)