【问题标题】:MYSQL full text word multiple times rankingMYSQL全文单词多次排名
【发布时间】:2020-09-17 17:23:54
【问题描述】:

我有一个包含产品名称的表格

我正在搜索“约翰逊

id, productname
1 , Johnson & Johnson baby wipes
2 , Johnson Baby soft wipes
3 , Johnson's baby wipes

我希望强生婴儿湿巾成为第一场比赛,然后是其他比赛。无论如何使用mysql全文搜索来实现这一点。

【问题讨论】:

  • 更多细节将不胜感激。 “强生”以外的项目顺序重要吗?您能否包括您尝试过的查询?
  • FTS 计算重量。如果您需要根据它进行排序 - 将 MATCH .. AGAINST 放入 ORDER BY 表达式。如果您需要首先按值中搜索词的数量对行进行排序,那么您必须使用常见的字符串函数(不是 FTS)计算该词的数量,并将此表达式放入排序表达式列表中。
  • @HamiltonPharmD 我只需要单词出现次数应该出现在单词出现次数较少的行之前。
  • stackoverflow.com/questions/13494460/… 这似乎是我想要实现的目标,但无法让它发挥作用

标签: mysql sql full-text-search


【解决方案1】:

请使用这个...如果您愿意,可以删除 no_of_match 字段。

select id, product_name,
(LEN(product_name) - LEN(REPLACE(product_name, 'Jhonson', ''))) / LEN('Jhonson') no_of_match
from table 
Order by   
 (LEN(product_name) - LEN(REPLACE(product_name, 'Jhonson', ''))) / LEN('Jhonson') 
desc 

【讨论】:

    【解决方案2】:

    在 MySQL 中解决此问题的一种方法:

    SELECT id,
        productname,     
    FROM #TEMP1
    ORDER BY ROUND (   
              (LENGTH(productname)- LENGTH( REPLACE ( productname, 'Johnson', '') ) )
              /LENGTH('Johnson')        
             ,2) DESC
    

    #TEMP1 是我使用您提供的值创建的测试表:

    create table #TEMP1
      (id  VARCHAR(max), productname  VARCHAR(max))
    INSERT INTO #TEMP1 (id, productname)
    VALUES
      ('1' , 'Johnson & Johnson baby wipes'),
      ('2' , 'Johnson Baby soft wipes'),
      ('3' , 'Johnson"s baby wipes')
    

    【讨论】:

      猜你喜欢
      • 2016-05-26
      • 1970-01-01
      • 2014-07-24
      • 2019-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多