Skip to content

Commit

Permalink
search on multiple fields not just package_attr_name or option_name
Browse files Browse the repository at this point in the history
fixes #134
  • Loading branch information
garbas committed Aug 7, 2020
1 parent 44cbea8 commit f797e44
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 51 deletions.
12 changes: 11 additions & 1 deletion src/Page/Options.elm
Expand Up @@ -398,7 +398,17 @@ makeRequest options channel queryRaw from size sort =
|> List.append (should_match 10)
in
Search.makeRequest
(Search.makeRequestBody query from size sort "option" "option_name" "option_name_query" should_queries)
(Search.makeRequestBody query
from
size
sort
"option"
"option_name"
[ "option_name_query"
, "option_description"
]
should_queries
)
("latest-" ++ String.fromInt options.mappingSchemaVersion ++ "-" ++ channel)
decodeResultItemSource
options
Expand Down
13 changes: 12 additions & 1 deletion src/Page/Packages.elm
Expand Up @@ -505,7 +505,18 @@ makeRequest options channel queryRaw from size sort =
|> List.append (should_match 10)
in
Search.makeRequest
(Search.makeRequestBody query from size sort "package" "package_attr_name" "package_attr_name_query" should_queries)
(Search.makeRequestBody query
from
size
sort
"package"
"package_attr_name"
[ "package_attr_name_query"
, "package_pname"
, "package_description"
]
should_queries
)
("latest-" ++ String.fromInt options.mappingSchemaVersion ++ "-" ++ channel)
decodeResultItemSource
options
Expand Down
110 changes: 61 additions & 49 deletions src/Search.elm
Expand Up @@ -734,8 +734,11 @@ filter_by_type type_ =
)


filter_by_query : String -> String -> List (List ( String, Json.Encode.Value ))
filter_by_query field queryRaw =
filter_by_query :
List String
-> String
-> List (List ( String, Json.Encode.Value ))
filter_by_query fields queryRaw =
let
query =
queryRaw
Expand All @@ -750,55 +753,64 @@ filter_by_query field queryRaw =
isLast =
List.length (String.words query) == i + 1
in
[ if isLast then
( "bool"
, Json.Encode.object
[ ( "should"
, Json.Encode.list Json.Encode.object
[ [ ( "match"
, Json.Encode.object
[ ( field
, Json.Encode.object
[ ( "query", Json.Encode.string query_word )
, ( "fuzziness", Json.Encode.string "1" )
, ( "_name", Json.Encode.string <| "filter_queries_" ++ String.fromInt (i + 1) ++ "_should_match" )
]
)
]
if isLast then
[ ( "bool"
, Json.Encode.object
[ ( "should"
, Json.Encode.list Json.Encode.object
(List.concatMap
(\field ->
[ [ ( "match"
, Json.Encode.object
[ ( field
, Json.Encode.object
[ ( "query", Json.Encode.string query_word )
, ( "fuzziness", Json.Encode.string "1" )
, ( "_name", Json.Encode.string <| "filter_queries_" ++ String.fromInt (i + 1) ++ "_should_match" )
]
)
]
)
]
, [ ( "match_bool_prefix"
, Json.Encode.object
[ ( field
, Json.Encode.object
[ ( "query", Json.Encode.string query_word )
, ( "_name"
, Json.Encode.string <| "filter_queries_" ++ String.fromInt (i + 1) ++ "_should_prefix"
)
]
)
]
)
]
]
)
fields
)
]
, [ ( "match_bool_prefix"
, Json.Encode.object
[ ( field
, Json.Encode.object
[ ( "query", Json.Encode.string query_word )
, ( "_name"
, Json.Encode.string <| "filter_queries_" ++ String.fromInt (i + 1) ++ "_should_prefix"
)
]
)
]
)
]

else
List.map
(\field ->
( "match_bool_prefix"
, Json.Encode.object
[ ( field
, Json.Encode.object
[ ( "query", Json.Encode.string query_word )
, ( "_name"
, Json.Encode.string <| "filter_queries_" ++ String.fromInt (i + 1) ++ "_prefix"
)
]
)
]
]
)
]
)

else
( "match_bool_prefix"
, Json.Encode.object
[ ( field
, Json.Encode.object
[ ( "query", Json.Encode.string query_word )
, ( "_name"
, Json.Encode.string <| "filter_queries_" ++ String.fromInt (i + 1) ++ "_prefix"
)
]
)
]
)
]
)
)
fields
)


Expand All @@ -809,10 +821,10 @@ makeRequestBody :
-> Sort
-> String
-> String
-> String
-> List String
-> List (List ( String, Json.Encode.Value ))
-> Http.Body
makeRequestBody query from sizeRaw sort type_ sort_field query_field should_queries =
makeRequestBody query from sizeRaw sort type_ sort_field query_fields should_queries =
let
-- you can not request more then 10000 results otherwise it will return 404
size =
Expand All @@ -839,7 +851,7 @@ makeRequestBody query from sizeRaw sort type_ sort_field query_field should_quer
, Json.Encode.list Json.Encode.object
(List.append
[ [ filter_by_type type_ ] ]
(filter_by_query query_field query)
(filter_by_query query_fields query)
)
)
, ( "should"
Expand Down

0 comments on commit f797e44

Please sign in to comment.