我对使用MySQL全文没有什么困惑。我有一个数据库,其字符集设置为utf-8
,排序规则设置为utf8_unicode_ci
我有以下搜索产品的流程。用户从下面的流程中选择以搜索任何产品
- 用户选择product_type,枚举字段,值为consumpble/unonsumable
- 然后选择product_nature,枚举0=>finished 1-finished
- 则用户选择位置,varchar用户可以选择多个位置
- 然后用户指定价格范围等等(大约还有5个选择)在搜索页面中,用户唯一输入的是位置和价格范围。休息他们从组合中选择的所有内容
我很困惑。
- 我的数据库支持全文搜索吗
- 我需要索引哪些字段才能启用全文搜索
- 由于仅在
varchar
和text
数据类型字段中支持全文。如果用户为筛选选择的多个字段在enum
中,如何获得相关结果 - 我想在顶部显示完全匹配,并根据用户选择的过滤器显示几乎匹配的产品,如上所述。这里按全文关联排序是否有效,因为有许多字段属于
enum
类型
编辑为了更好地理解,例如
这个搜索是为那些知道该买什么但什么都不知道的人专门搜索的。就像我需要一个移动PHone,但我不知道其他什么,我只是从组合中选择它的类型(Wifi/不带Wifi),然后选择相机(带/不带),然后我选择其他一些功能,比如这样。然后我指定了我能负担得起的价格范围,然后我想要在特定地点的商店里有手机。为此,我键入location A, location B, location C
。我想要基于这两个位置的结果。我想根据指定的搜索参数的最接近匹配来排序结果。精确匹配到最接近的匹配,然后是最不接近的匹配。希望这能帮助
有人能解释一下吗?
感谢
-
Full-Text Search Functions
页面上的文档声明FULLTEXT
只能与MyISAM一起使用,但是,MySQL 5.6通过InnoDB添加了对FULLTEXT
索引的支持(请参见InnoDB Table and Index
页面上的Section 14.2.4.12.3
)。如果您的表设置为MyISAM,那么是的-您应该有支持;使用InnoDB,可能会挂起您的MySQL版本。 -
要启用全文搜索,应添加
FULLTEXT
索引只在您将要使用搜索的字段上(没有意义将其添加到您不会添加的字段中)。FULLTEXT
索引只能是应用于CHAR
、VARCHAR
和TEXT
列类型,因此可以这是一个开始。您的产品名称可能太短,不必担心FULLTEXT
索引(可以考虑HASH索引),但是产品描述(如果你有)会非常好。 -
enum
数据适合使用BTREE
索引进行索引,而不是使用FULLTEXT
一 -
不确定;你能举个例子说明要查询哪些字段吗以及排序和它们的数据类型,以提供更好的图像你需要吗?
- MySQL支持MyISAM表类型上的全文,并且从5.6.x开始某处支持InnoDB表上的全文
- 在任何要进行全文搜索的字段上添加全文索引。在int/binal/foat字段上进行全文搜索毫无意义,所以基本上,任何需要对其执行全文搜索的varchar/text字段
- 枚举上的全文没有意义,因为枚举只用于精确匹配
- 您可以根据全文结果的内部相关性分数对其进行排序