0

In my Magento 2 setup, I have products called something like 'Xxxx 1 DS'. When I search for 'xxxx', the product pops up. But when I search for '1 ds', there are no search results. Is this because the search starts with a number? I have set the minimun search characters to 1..

1 Answer 1

1

I do not know your search engine, I suppose that you use Mysql. I cannot comment your question.

But you may try to use SolR or Elastic Search if you want to affine your search experience. It is EE feature, but you can find community module.

You need also to see which raw data is indexed to Mysql / SolR / ElasticSearch to know if the problem occurs on the index level or in the query level.

I test it with ElasticSearch and it works on my side.

I reproduice your error with Mysql search engine.

Resolution :

The data indexed (catalogsearch_fulltext_scope1) is :

*************************** 1. row ***************************
   entity_id: 45
attribute_id: 73
  data_index: Xxxx 1 DS

The SQL query for 'xxxx' request :

SELECT `main_select`.`entity_id`, MAX(score) AS `relevance` FROM (SELECT `search_index`.`entity_id`, ((0) + LEAST((MATCH (data_index) AGAINST ('xxxx*' IN BOOLEAN MODE)), 1000000) * POW(2, search_weight)) AS `score` FROM `catalogsearch_fulltext_scope1` AS `search_index` LEFT JOIN `catalog_eav_attribute` AS `cea` ON search_index.attribute_id = cea.attribute_id LEFT JOIN `cataloginventory_stock_status` AS `stock_index` ON search_index.entity_id = stock_index.product_id AND stock_index.website_id = 0 WHERE (stock_index.stock_status = 1) AND (MATCH (data_index) AGAINST ('xxxx*' IN BOOLEAN MODE))) AS `main_select` GROUP BY `entity_id` ORDER BY `relevance` DESC LIMIT 10000

The SQL query for '1 ds' request:

SELECT `main_select`.`entity_id`, MAX(score) AS `relevance` FROM (SELECT `search_index`.`entity_id`, ((0) + LEAST((MATCH (data_index) AGAINST ('1 DS' IN BOOLEAN MODE)), 1000000) * POW(2, search_weight)) AS `score` FROM `catalogsearch_fulltext_scope1` AS `search_index` LEFT JOIN `catalog_eav_attribute` AS `cea` ON search_index.attribute_id = cea.attribute_id LEFT JOIN `cataloginventory_stock_status` AS `stock_index` ON search_index.entity_id = stock_index.product_id AND stock_index.website_id = 0 WHERE (stock_index.stock_status = 1) AND (MATCH (data_index) AGAINST ('1 DS' IN BOOLEAN MODE))) AS `main_select` GROUP BY `entity_id` ORDER BY `relevance` DESC LIMIT 10000

If you check Mysql documentation, there are two parameters for Configuring Minimum and Maximum Word Length :

http://dev.mysql.com/doc/refman/5.7/en/fulltext-fine-tuning.html

So edit your my.cnf file, add these parameters :

ft_min_word_len = 1
innodb_ft_min_token_size = 1

Restart mysql

service mysql restart

Rebuild your index

bin/magento indexer:reindex

Then you will see your product on the search result page.

1
  • Hello, with above query i got result entity_id relevance 18938 568.3555908203125 is it right or wrong ? Commented Nov 30, 2020 at 11:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.