LAPS Posted November 1, 2020 Share Posted November 1, 2020 Hello there, I've a serie of pages manually sorted in the admin having the following titles: Black color Black dark color Black light color White color White dark color White light color Green color Green dark color Green light color Blue color Blue dark color Blue light color Red color Red dark color Red light color Color Dark Color Light color And (for now) I've a search form to search for the above pages (template is color-page) that use the following code: $search_result = $pages->find("template=color-page, title={$search_term}, sort=sort"); When I perform the search with $search_term equal to "Dark Color" then I get the result sorted as follow (and as expected because of the sort=sort) Black dark color White dark color Green dark color Blue dark color Red dark color Dark Color However, I would like to sort the $search_result by "relevance" to get the found pages sorted as follow: Dark Color Black dark color Blue dark color Green dark color Red dark color White dark color That is, "Dark color" is the first item because it is the "most matching". From the official PW documentation about sorting I know that if you don't specify your own sort=property the results are sorted according to MySQL's text searching relevance but this MySQL feature seems do not always work and I would like to make sure that found pages are sorted by "most matching" as in the example above. How can I make that in PW? Link to comment Share on other sites More sharing options...
OLSA Posted November 2, 2020 Share Posted November 2, 2020 On 11/1/2020 at 8:53 AM, LAPS said: However, I would like to sort the $search_result by "relevance" to get the found pages sorted as follow: Dark Color Black dark color Blue dark color Green dark color Red dark color White dark color Here is example to get that with 2 steps: // search term: "Dark color" or "dark color" // 1: get all starts with $items = $pages->find("template=color-page, title%^='dark color'"); // 2: get all EXCEPT items from step 1 AND sort them by title $items->import($pages->find("template=color-page, id!=$items, title%='dark color', sort=title")); Also there are and other options to get the same (sort array on PHP side, or do direct sql queries using PW api to get "order-by best match"). Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now