2011-09-14 197 views
0

我需要帮助全文搜索mysql。 我正在找的书名为dreams。认识梦想 Mysql全文搜索忽略重复单词一次取词

  • 普赛克梦想&超越梦想
  • 没有梦想
  • 只有 - 当我寻找梦想我在我的梦想是最伟大的梦想视觉的梦想
  • 词典得到

    1. 印度梦想
    2. 梦想
    3. 其他书籍

    其实我在寻找梦想 如何让第6本书成为第一本。

    我想在这种情况下忽略重复的单词dreams

    您可以搜索here

    我面对这些类型的不同标题的问题。

  • 回答

    0

    列反复搜索词的相关性是higest,我能看到的唯一的解决办法是用精确匹配做一个联合查询您的标准全文搜索例如:

    SELECT * FROM books 
    WHERE title = 'Dreams' 
    UNION 
    SELECT * FROM books 
    WHERE MATCH(title) AGAINST("Dreams") 
    

    这将首先显示完全匹配。

    ,或者你可以

    SELECT * FROM books 
    WHERE MATCH(title) AGAINST("Dreams") 
    ORDER BY (CASE WHEN title = 'Dreams' THEN 1 ELSE 0 END),..... 
    
    +0

    你好,谢谢你的答案。这将有所帮助。问题在于性能。我们有1000万本书。我以前试过工会..它需要很长时间来执行搜索..有没有其他选择在单个查询.. –

    +0

    加快平等检查工会,你可以添加一个标题的标准索引,解决方案时可能的情况可能尽管你是最好的选择。 –

    0

    你想要的确切情况是第一个建议吗?

    为了尝试:

    "ORDER BY ('{$str_search}' = title) DESC" 
    

    这将使搜索内容您搜索首先出现的确切情况。

    2个解决方案:

    "ORDER BY ('{$str_search}' LIKE title) DESC" 
    "ORDER BY ('{$str_search}%' LIKE title) DESC" 
    

    3解决方案可用于订购了所有在你的搜索词开始。

    注意:该解决方案与CASE相同。