Michael Thomas
08/07/2023, 1:24 PMquery_by
parameters on multiple fields.
Now I want to create word-suggestions (typeahead) for that matter, no issue into creating a new suggestions index, but wondering what would be the best approach for this?
[
'name' => 'address.city',
'type' => 'string',
],
[
'name' => 'address.county',
'type' => 'string',
],
[
'name' => 'address.state',
'type' => 'string',
],
[
'name' => 'address.street',
'type' => 'string',
],
[
'name' => 'address.zip',
'type' => 'string',
],
[
'name' => 'primaryServiceType',
'type' => 'string',
],
[
'name' => 'servicingType',
'type' => 'string',
],
[
'name' => 'serviceType',
'type' => 'string[]',
],
[
'name' => 'title',
'type' => 'string',
],
[
'name' => 'post_date_timestamp',
'type' => 'int32',
'sort' => true,
],
The above would be all the fields I want to receive a suggestion for. So if you'd type Maryland
for example. I might have a resource where Maryland
is part of the title, just as much Maryland
could be part of the street or the county...
So If I start typing Mary
I'd love to get the suggestion --> title / county / street for that matter, but weighted.
I do get results, I have weighted results, but how would I display that best as a single result?
Merge all the data together in array from the results I get or .. ?Jason Bosco
08/07/2023, 3:36 PMquery_by
, along with query_by_weights
determines the ranking of the best-matched recordJason Bosco
08/07/2023, 3:37 PMbut how would I display that best as a single result?
Merge all the data together in array from the results I get orIt sounds like you’re sending multiple searches in a multi_search request, with one search per field? This is not necessary to do unless you have some other constraint. Instead if you just list the fields in priority order in
query_by
in a single search, Typesense will return the best matched result, across different fields in a single ranked listMichael Thomas
08/08/2023, 7:11 AMconst searchParameters = {
q: searchParams?.searchQuery,
query_by: 'title,address.city,address.county,address.state,address.street,address.zip,primaryServiceType,serviceType,servicingType',
query_by_weights: '3,2,1,1,2,2,3,3,3',
filter_by: searchParams?.filterQuery,
sort_by: sortParams.type + ':' + sortParams.order,
}
But then my results are an object that are returned following the structure I've shown above.
What I'd like to do is get a single array of best search matches, without the need to loop through all the fields in the returned object ( if that is possible )Jason Bosco
08/08/2023, 4:14 PMhit.document
. You could do the filtering based on the presence of a highlight for that field in hit.highlight
.
So this needs to be done client-side with the values in the API response