diff options
| author | lain <lain@soykaf.club> | 2020-11-19 16:12:01 +0100 | 
|---|---|---|
| committer | lain <lain@soykaf.club> | 2020-11-19 16:12:01 +0100 | 
| commit | a60242464e6a92bf6de46a1cf7877799de27a3ce (patch) | |
| tree | a5378a7a50a4dc02eed18871501b1112dfc5ec37 /lib | |
| parent | 6f9b03384fe50ce063e8fee3103a69dff298107b (diff) | |
| download | pleroma-a60242464e6a92bf6de46a1cf7877799de27a3ce.tar.gz pleroma-a60242464e6a92bf6de46a1cf7877799de27a3ce.zip | |
Search: Add option to search with the websearch function
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/activity/search.ex | 31 | 
1 files changed, 28 insertions, 3 deletions
| diff --git a/lib/pleroma/activity/search.ex b/lib/pleroma/activity/search.ex index ceb365bb3..8449b9b00 100644 --- a/lib/pleroma/activity/search.ex +++ b/lib/pleroma/activity/search.ex @@ -19,11 +19,13 @@ defmodule Pleroma.Activity.Search do      offset = Keyword.get(options, :offset, 0)      author = Keyword.get(options, :author) +    search_function = Pleroma.Config.get([:instance, :search_function], :plain) +      Activity      |> Activity.with_preloaded_object()      |> Activity.restrict_deactivated_users()      |> restrict_public() -    |> query_with(index_type, search_query) +    |> query_with(index_type, search_query, search_function)      |> maybe_restrict_local(user)      |> maybe_restrict_author(author)      |> maybe_restrict_blocked(user) @@ -50,7 +52,7 @@ defmodule Pleroma.Activity.Search do      )    end -  defp query_with(q, :gin, search_query) do +  defp query_with(q, :gin, search_query, :plain) do      from([a, o] in q,        where:          fragment( @@ -61,7 +63,18 @@ defmodule Pleroma.Activity.Search do      )    end -  defp query_with(q, :rum, search_query) do +  defp query_with(q, :gin, search_query, :websearch) do +    from([a, o] in q, +      where: +        fragment( +          "to_tsvector('english', ?->>'content') @@ websearch_to_tsquery('english', ?)", +          o.data, +          ^search_query +        ) +    ) +  end + +  defp query_with(q, :rum, search_query, :plain) do      from([a, o] in q,        where:          fragment( @@ -73,6 +86,18 @@ defmodule Pleroma.Activity.Search do      )    end +  defp query_with(q, :rum, search_query, :websearch) do +    from([a, o] in q, +      where: +        fragment( +          "? @@ websearch_to_tsquery('english', ?)", +          o.fts_content, +          ^search_query +        ), +      order_by: [fragment("? <=> now()::date", o.inserted_at)] +    ) +  end +    defp maybe_restrict_local(q, user) do      limit = Pleroma.Config.get([:instance, :limit_to_local_content], :unauthenticated) | 
