【问题标题】:Most matching words in search query搜索查询中最匹配的词
【发布时间】:2013-08-09 07:06:32
【问题描述】:

我有用户表(例如 UserMst)是 MySQL 之类的

UserID  FirstName  LastName  FullName (expression column)   
------  ---------  --------  ----------------------------
1       Manish     Patel     Manish Patel
2       Dharmesh   Patel     Dharmesh Patel 
3       Patel      Pranay    Patel  Pranay
4       Patel      Ankita    Patel Ankita

现在我正在获取结果如下:

Select * from UserMst
where (    FirstName like 'patel dha%'
        OR LastName  like 'patel dha% 
        OR FullName  like '%patel dha% 
        OR FullName  like '%patel% 
        OR FullName  like '%dha% )
Order by ( case when FirstName like 'patel dha%' then 1
                WHEN LastName  like 'patel dha%' then 2 
                WHEN FirstName like '%patel dha' then 3
                WHEN LastName  like '%patel dha%'then 4 end ),
          FullName   

此查询返回结果完美,但我需要更接近的排序结果。 在这种情况下,如果有人输入关键字“patel dha”(这里用户可以在 2 个单词之间留出更多空间,并且他也可以输入尽可能多的单词 例如'patel dha' 或 'patel dha pran') 它的意思是 他正在尝试查找/搜索用户 1(例如 Dharmesh patel) 这些记录应该放在第一位。

我的预期结果是:(如果用户输入此关键字:'patel dha' 或 'patel dha')

UserID  FirstName  LastName  FullName   
------  ---------  --------  --------
2   Dharmesh   Patel     Dharmesh Patel 
4   Patel      Ankita    Patel Ankita
3   Patel      Pranay    Patel  Pranay
1   Manish     Patel     Manish Patel

如果用户以其他方式搜索,那么 我的预期结果是:(如果用户输入此关键字:'patel dha pr' 或 'patel dha pran')

UserID  FirstName  LastName  FullName   
------  ---------  --------  --------
2   Dharmesh   Patel     Dharmesh Patel 
3   Patel      Pranay    Patel  Pranay
4   Patel      Ankita    Patel Ankita
1   Manish     Patel     Manish Patel

订单已更改。 (因为找到了最匹配的词)

我们可以在这里使用正则表达式吗?或者也许是另一种方式来做到这一点?

【问题讨论】:

  • 为此使用全文搜索索引:devzone.zend.com/26/using-mysql-full-text-searching
  • 谢谢@AlmaDoMundo,你能给我举个例子吗?还有一件事,结果返回完美,但问题只是排序。
  • 为什么不想点击示例链接?
  • @YourCommonSense,我正在努力。但我怀疑他不明白我的问题。这就是为什么我只是更详细地解释他。
  • 全文索引正是您想要的。但这不是一件简单的事情,你可以通过简单的动作来踢。必须阅读文档才能从中获利。

标签: mysql search full-text-search


【解决方案1】:

实际上它就像你说的那样有效,只是在第一个示例中,Manish Patel 应该排名第 2,因为排序顺序 A-Z。

也许我没有完全理解这个问题:)

Here is a SQLFiddle

编辑:顺便说一下,我将带有 2 个空格的条目改为下划线,因为 SQLFiddle 似乎正在自动修剪重复项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    相关资源
    最近更新 更多