mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-11-27 21:47:59 +01:00
allow the parser to determine the right type for the default field
This commit is contained in:
parent
dd5d553c0d
commit
5163da171b
7 changed files with 13 additions and 9 deletions
|
@ -46,7 +46,7 @@ defmodule Philomena.Comments.Query do
|
||||||
literal_fields = ~W(image_id)
|
literal_fields = ~W(image_id)
|
||||||
ngram_fields = ~W(body)
|
ngram_fields = ~W(body)
|
||||||
custom_fields = ~W(author user_id)
|
custom_fields = ~W(author user_id)
|
||||||
default_field = "body"
|
default_field = {"body", :ngram}
|
||||||
transforms = %{
|
transforms = %{
|
||||||
"user_id" => &Philomena.Comments.Query.user_id_transform/2,
|
"user_id" => &Philomena.Comments.Query.user_id_transform/2,
|
||||||
"author" => &Philomena.Comments.Query.author_transform/2
|
"author" => &Philomena.Comments.Query.author_transform/2
|
||||||
|
|
|
@ -5,7 +5,7 @@ defmodule Philomena.Galleries.Query do
|
||||||
literal_fields = ~W(title user image_ids watcher_ids)
|
literal_fields = ~W(title user image_ids watcher_ids)
|
||||||
date_fields = ~W(created_at updated_at)
|
date_fields = ~W(created_at updated_at)
|
||||||
ngram_fields = ~W(description)
|
ngram_fields = ~W(description)
|
||||||
default_field = "title"
|
default_field = {"title", :term}
|
||||||
aliases = %{
|
aliases = %{
|
||||||
"user" => "creator"
|
"user" => "creator"
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,7 +65,7 @@ defmodule Philomena.Images.Query do
|
||||||
literal_fields = ~W(faved_by orig_sha512_hash sha512_hash uploader source_url original_format)
|
literal_fields = ~W(faved_by orig_sha512_hash sha512_hash uploader source_url original_format)
|
||||||
ngram_fields = ~W(description)
|
ngram_fields = ~W(description)
|
||||||
custom_fields = ~W(gallery_id)
|
custom_fields = ~W(gallery_id)
|
||||||
default_field = "namespaced_tags.name"
|
default_field = {"namespaced_tags.name", :term}
|
||||||
transforms = %{
|
transforms = %{
|
||||||
"gallery_id" => &Philomena.Images.Query.gallery_id_transform/2
|
"gallery_id" => &Philomena.Images.Query.gallery_id_transform/2
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ defmodule Philomena.Posts.Query do
|
||||||
literal_fields = ~W(forum_id topic_id)
|
literal_fields = ~W(forum_id topic_id)
|
||||||
ngram_fields = ~W(body subject)
|
ngram_fields = ~W(body subject)
|
||||||
custom_fields = ~W(author user_id)
|
custom_fields = ~W(author user_id)
|
||||||
default_field = "body"
|
default_field = {"body", :ngram}
|
||||||
transforms = %{
|
transforms = %{
|
||||||
"user_id" => &Philomena.Posts.Query.user_id_transform/2,
|
"user_id" => &Philomena.Posts.Query.user_id_transform/2,
|
||||||
"author" => &Philomena.Posts.Query.author_transform/2
|
"author" => &Philomena.Posts.Query.author_transform/2
|
||||||
|
|
|
@ -7,7 +7,7 @@ defmodule Philomena.Reports.Query do
|
||||||
ip_fields = ~W(ip)
|
ip_fields = ~W(ip)
|
||||||
bool_fields = ~W(open)
|
bool_fields = ~W(open)
|
||||||
ngram_fields = ~W(reason)
|
ngram_fields = ~W(reason)
|
||||||
default_field = "reason"
|
default_field = {"reason", :ngram}
|
||||||
|
|
||||||
@parser Parser.parser(
|
@parser Parser.parser(
|
||||||
int_fields: int_fields,
|
int_fields: int_fields,
|
||||||
|
|
|
@ -5,7 +5,7 @@ defmodule Philomena.Tags.Query do
|
||||||
literal_fields = ~W(slug name name_in_namespace namespace implies alias_of implied_by aliases category analyzed_name)
|
literal_fields = ~W(slug name name_in_namespace namespace implies alias_of implied_by aliases category analyzed_name)
|
||||||
bool_fields = ~W(aliased)
|
bool_fields = ~W(aliased)
|
||||||
ngram_fields = ~W(description short_description)
|
ngram_fields = ~W(description short_description)
|
||||||
default_field = "analyzed_name"
|
default_field = {"analyzed_name", :ngram}
|
||||||
aliases = %{
|
aliases = %{
|
||||||
"implies" => "implied_tags",
|
"implies" => "implied_tags",
|
||||||
"implied_by" => "implied_by_tags",
|
"implied_by" => "implied_by_tags",
|
||||||
|
|
|
@ -1,18 +1,22 @@
|
||||||
defmodule Search.TermRangeParser do
|
defmodule Search.TermRangeParser do
|
||||||
alias Search.LiteralParser
|
alias Search.LiteralParser
|
||||||
|
alias Search.NgramParser
|
||||||
|
|
||||||
# Unfortunately, we can't use NimbleParsec here. It requires
|
# Unfortunately, we can't use NimbleParsec here. It requires
|
||||||
# the compiler, and we're not in a macro environment.
|
# the compiler, and we're not in a macro environment.
|
||||||
|
|
||||||
def parse(input, fields, default_field) do
|
def parse(input, fields, {default_field, type}) do
|
||||||
tokens =
|
tokens =
|
||||||
Enum.find_value(fields, fn {f, p} ->
|
Enum.find_value(fields, fn {f, p} ->
|
||||||
field(input, f, p)
|
field(input, f, p)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
tokens || [{LiteralParser, default_field}, range: :eq, value: input]
|
tokens || [{parser(type), default_field}, range: :eq, value: input]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp parser(:term), do: LiteralParser
|
||||||
|
defp parser(:ngram), do: NgramParser
|
||||||
|
|
||||||
defp field(input, field_name, field_parser) do
|
defp field(input, field_name, field_parser) do
|
||||||
field_sz = byte_size(field_name)
|
field_sz = byte_size(field_name)
|
||||||
|
|
||||||
|
@ -33,4 +37,4 @@ defmodule Search.TermRangeParser do
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue