【问题标题】:php mysql search description for keywordsphp mysql 搜索关键字的描述
【发布时间】:2015-03-07 18:09:09
【问题描述】:

我正在创建一个用户上传图片并为其编写描述的网站。 我想让用户能够搜索他们想要检索的图像的描述。

起初我决定将用户在上传图片时输入的描述转换为关键字并将关键字链接到图像,这样当用户稍后执行搜索描述时,他们输入的描述将被转换到关键字,并且将以某种方式为关键字生成同义词,这些同义词都将针对数据库中的关键字进行搜索。

最近我读到了 mysql 全文搜索。我创建了一个包含描述和图像 ID 的表,并使用全文搜索功能尝试了几个查询,由于字长限制和停用词,它似乎在大多数搜索中没有返回任何结果。 这是我的测试查询:

SELECT * FROM descriptions WHERE MATCH (description) AGAINST ('same' IN BOOLEAN MODE);

表中有一个条目,其描述包含关键字“相同”,但未返回任何结果。

我的问题是在描述表上使用“LIKE %keywords%”还是在描述表上使用 FTS 或坚持使用关键字表方法更好?

【问题讨论】:

    标签: php mysql search full-text-search search-engine


    【解决方案1】:

    使用 LIKE,您有三种方法。

    1) 如果包含所有单词的顺序相同(关键字:一架飞机)

    SELECT * FROM descriptions WHERE description LIKE('%One airplane%');
    

    2) 如果它包含所有单词但顺序无关紧要

    SELECT * FROM descriptions WHERE description LIKE('%One%') AND description LIKE('% airplane%');
    

    3) 如果它包含一些单词

    SELECT * FROM descriptions WHERE description LIKE('%One%') OR description LIKE('% airplane%');
    

    现在您可以选择搜索的严格程度。

    如果您想使用第二个或第三个实现,您将通过“空格”将字符串与关键字分开,并为数组中的每个项目添加一个like。

    【讨论】:

    • 感谢您的回复。您的回答是否意味着在这种情况下使用 LIKE 而不是我在问题中提到的 FTS 或关键字表方法更好?
    • 如果您不是 MySQL 专家,您会更容易理解它的工作原理。 FTS 比 LIKE 更复杂。最后,您可能可以同时使用两者,但您将投入更多时间使其与 FTS 一起使用
    • 谢谢,是否可以使用 LIKE 获得 FTS 提供的某种排名?
    猜你喜欢
    • 2013-04-08
    • 2018-12-16
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 2011-08-24
    相关资源
    最近更新 更多