关于mysql全文搜索的困惑

时间:2012-10-02 15:20:45

标签: php mysql full-text-search

我使用MySQL全文很少混淆。我的数据库的字符集设置为utf-8,排序规则设置为utf8_unicode_ci

我有以下搜索产品的流程。用户从下面的流程中选择搜索任何产品

  • 用户选择product_type,enum字段,其值为耗材/不可消耗。
  • 然后选择product_nature,枚举0 =>完成1-未完成。
  • 然后用户选择位置,varchar用户可以选择多个位置。
  • 然后用户指定价格范围 等等(约5个选择) 在搜索页面中,用户输入的唯一内容是位置,价格范围。休息他们从组合中选择的所有内容。

我的困惑是。

  1. 我的数据库是否支持全文搜索?
  2. 我需要索引哪些字段才能启用全文搜索。
  3. 由于varchartext数据类型字段仅支持全文。如果用户选择过滤的许多字段位于enum
  4. ,如何获得相关结果
  5. 我希望在顶部和几乎匹配的产品上显示完全匹配,具体取决于用户选择的过滤器,如上所述。按文字相关性排序是否适用于此处,因为有许多类型为enum的字段。
  6. 修改 为了更好地理解例如

    此搜索适用于那些知道应该购买但不知道其他任何内容的人。就像我需要一个移动电话,但我不知道其他什么,我只是从组合中选择它的类型(Wifi /没有wifi),然后选择相机(有/没有),然后选择其他几个这样的功能。然后我指定我能负担的价格范围,然后我想在特定地点的商店提供电话。为此,我输入location A, location B, location C。我想要基于这些位置的结果。我想根据指定的搜索参数的最近匹配来订购结果。与最接近的匹配完全匹配,然后是最不匹配的匹配。希望这有帮助

    有人可以对此有所了解吗?

    由于

2 个答案:

答案 0 :(得分:3)

  1. Full-Text Search Functions页面上的文档 声明FULLTEXT只能与MyISAM一起使用,然而,MySQL 5.6添加了对InnoDB的FULLTEXT索引的支持(​​请参阅InnoDB Table and Index Section 14.2.4.12.3 }页面)。如果你的表被设置为MyISAM,那么是 - 你应该得到支持;使用InnoDB,可能 - 等待你的MySQL版本。

  2. 要启用全文搜索,您应添加FULLTEXT索引 只在您要使用搜索的字段上(没有点 将它添加到你不会的字段中。 FULLTEXT索引只能是。{1}}索引 已应用于CHARVARCHARTEXT列类型,因此可以 是一个开始。您的产品名称可能太短而无法担心 FULLTEXT索引(可能考虑使用HASH索引),但是你的 产品说明(如果你有的话)会非常有用。

  3. enum数据可以使用BTREE索引进行索引,而不是FULLTEXT 之一。

  4. 不确定;你可以发布一个查询哪些字段的例子 并订购和他们的数据类型,以提供更好的图像 你需要吗?

答案 1 :(得分:2)

  1. MySQL支持MyISAM表类型的全文,从5.6.x开始支持InnoDB表的全文。
  2. 在要进行全文搜索的任何字段上添加全文索引。 int / binary / float字段的全文没有意义,所以基本上你需要进行全文搜索的任何varchar / text字段
  3. 枚举上的
  4. 全文无意义,因为枚举仅用于完全匹配
  5. 您可以按内部relevance score订购全文结果。