Query closest matching products
I think you are looking something like this.
This will list all products in the same topic id..

SELECT 
   productClassification.asin
 , productClassification.topic
 , productClassification.weight
FROM (
 SELECT 
   productClassification.topic
 FROM
   productClassification
 WHERE
   productClassification.asin = 'B01LYQ7HHQ'
)
 AS
 productClassification_filter
INNER JOIN 
 productClassification
ON
 productClassification.topic = productClassification_filter.topic
AND
  productClassification.asin != 'B01LYQ7HHQ'
ORDER BY 
   productClassification.topic ASC
 , productClassification.weight ASC


Result

asin         topic         weight  
----------  ------  ---------------
B01MATR1ZN       1    99.1049586790
B01M7MPM53       1    99.1240145475
B01KWK92UQ       1    99.5800318809
B01LXSHRCW       1    99.6681413232
B01LZF3T03       1    99.6694739441
B01M11J5C5       1    99.6694741630
B01M11HUG0       1    99.6694747525
B01M1DBCJR       1    99.6747018048
B01M1DAC7T       1    99.6759819038
B01M1DAN1S       1    99.6759829421
B01M1DCIFY       1    99.6759830134


But if you want to limit per topic id you need to use user variables. 
This query will show the 3 best matching products per topic id

SELECT 
   productClassification_ordered_ranked_limited.ASIN
 , productClassification_ordered_ranked_limited.topic
 , productClassification_ordered_ranked_limited.weight
FROM (
  SELECT
    @topic := NULL
  , @rank := 0
)
 AS
  init_user_vars
CROSS JOIN (

SELECT 
   productClassification_ordered_ranked.asin
 , productClassification_ordered_ranked.topic
 , productClassification_ordered_ranked.weight
 , productClassification_ordered_ranked.rank
FROM ( 
  SELECT 
     productClassification_ordered.asin
   , productClassification_ordered.topic
   , productClassification_ordered.weight
   , @rank := (
    CASE
     WHEN @topic := productClassification_ordered.topic
     THEN @rank + 1
     ELSE @rank := 0
    END
     ) AS rank
   , (@topic := productClassification_ordered.topic)
  FROM ( 
    SELECT 
      productClassification.asin
    , productClassification.topic
    , productClassification.weight
    FROM (
      SELECT 
        productClassification.topic
      FROM
        productClassification
      WHERE
        productClassification.asin = 'B01LYQ7HHQ'
      )
      AS
        productClassification_filter
      INNER JOIN 
        productClassification
      ON
        productClassification.topic = productClassification_filter.topic
      AND
        productClassification.asin != 'B01LYQ7HHQ'
      ORDER BY 
        productClassification.topic ASC
      , productClassification.weight ASC

    )
    AS
      productClassification_ordered
  )
   AS
     productClassification_ordered_ranked
  )
   AS 
     productClassification_ordered_ranked_limited
 WHERE
   productClassification_ordered_ranked_limited.rank &lt;= 3 -- limit 3 per topic id


Result

ASIN         topic         weight  
----------  ------  ---------------
B01MATR1ZN       1    99.1049586790
B01M7MPM53       1    99.1240145475
B01KWK92UQ       1    99.5800318809