0

我对使用 MySQL 全文没有什么困惑。我有数据库,其字符集设置为utf-8,排序规则设置为utf8_unicode_ci

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

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

我的困惑是。

  1. 我的数据库是否支持全文搜索?
  2. 为了启用全文搜索,我需要索引哪些字段。
  3. varchar因为仅在和text数据类型字段中支持全文。如果用户为过滤器选择的许多字段在其中,如何获得相关结果enum
  4. 我想根据用户选择的过滤器在顶部显示完全匹配和几乎匹配的产品,就像我上面描述的那样。是否按全文相关性排序在这里工作,因为有许多类型的字段enum

编辑 为了更好地理解例如

此搜索适用于那些知道要买什么但不知道其他任何东西的人。就像我需要一部手机一样,但我什么都不知道,我只是从组合中选择它的类型(Wifi/不带 wifi),然后选择相机(带/不带),然后选择其他几个类似的功能。然后我指定我能承受的价格范围,然后我希望在特定位置的商店中有电话。为此,我键入location A, location B, location C. 我想要基于这些位置中的任何一个的结果。我想根据指定的搜索参数的最接近的匹配对结果进行排序。精确匹配到最接近的匹配,然后是最接近的匹配。希望这可以帮助

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

谢谢

4

2 回答 2

3
  1. 页面上的文档Full-Text Search Functions指出FULLTEXT只能与 MyISAM 一起使用,但是,MySQL 5.6 添加了对FULLTEXTInnoDB 索引的支持(​​参见页面Section 14.2.4.12.3InnoDB Table and Index)。如果您的表设置为 MyISAM,那么是的 - 您应该得到支持;使用 InnoDB,可能 - 等待您的 MySQL 版本。

  2. 要启用全文搜索,您应该FULLTEXT仅在要使用搜索的字段上添加索引(没有必要将其添加到您不会使用的字段)。FULLTEXT索引只能应用于CHARVARCHARTEXT列类型,因此这可能是一个开始。您的产品名称可能太短而无需担心 FULLTEXT索引(可以考虑使用 HASH 索引),但您的产品描述(如果有的话)会非常适合它。

  3. enum数据最好用一个BTREE索引来索引,而不是FULLTEXT 一个。

  4. 没有把握; 您能否发布一个示例,说明将查询和排序哪些字段及其数据类型,以便更好地了解您的需求?

于 2012-10-02T15:28:26.240 回答
2
  1. MySQL 支持 MyISAM 表类型的全文,从 5.6.x 开始,某处支持 InnoDB 表的全文。
  2. 在要进行全文搜索的任何字段上添加全文索引。int/binary/float 字段上的全文没有意义,所以基本上任何你需要做全文搜索的 varchar/text 字段
  3. 枚举上的全文没有意义,因为枚举仅用于完全匹配
  4. 您可以按其内部相关性分数对全文结果进行排序。
于 2012-10-02T15:29:36.127 回答