New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Fulltext search in the Magento backend to use elasticsearch #38634
base: 2.4-develop
Are you sure you want to change the base?
Add Fulltext search in the Magento backend to use elasticsearch #38634
Conversation
Hi @digitalrisedorset. Thank you for your contribution! Add the comment under your pull request to deploy test or vanilla Magento instance:
❗ Automated tests can be triggered manually with an appropriate comment:
Allowed build names are:
You can find more information about the builds here For more details, review the Code Contributions documentation. |
public function addIdFilter($productId, $exclude = false): ProductCollection | ||
{ | ||
if (is_array($productId)) { | ||
$this->getSelect()->order("find_in_set(e.entity_id,'".implode(',', array_reverse($productId))."')"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The array_reverse is likely not needed but it is the only way at this time for the product result to be correctly sorted
…ch as elasticsearch does not store the simple products
* @param array $products | ||
* @return array | ||
*/ | ||
private function getSimpleProductIds(array $products): array |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The context with this additional query is that elasticsearch does not store the simple products data from the configurable. This solution is not perfect but it does mean the backend sees the simple products as well as the parents
Add Fulltext search in the Magento backend to use elasticsearch to find matches using search strategies similar to the frontend
Description (*)
The changes in this PR make the full text search from the backend using the configured elasticsearch engine in the same way as the frontend. The search term is submitted to the search engine so that it gets compared with product name field and product sku field. After the search returns some products match, the product grid filters do work like before.
Related Pull Requests
Fixed Issues (if relevant)
Manual testing scenarios (*)
Test 1: backward compliance test
Using the full text input in the backend catalog product grid, we can find products that have the search term in their product name
Test 2: backward compliance test
Using the full text input in the backend catalog product grid, we can find products for which their skus start with the search term
Test 3: this is a new test specific to the changes added
Using the full text input in the backend catalog product grid, we can find products for which their product name contain either of the search term words
Test 4: this is a new test specific to the changes added
Using the filters in the product grid form, the results are refined when using search term with some filters value (eg: gender..)
Questions or comments
It is likely that the file
app/code/Magento/CatalogSearch/etc/search_request.xml
will need to be tuned to improved the search usabilityI have now added a mechanism to reorder the product collection after elasticsearch has been called. I'd like to have some guidance how elasticsearch boost work
Contribution checklist (*)