【发布时间】:2010-11-02 02:18:45
【问题描述】:
我的 mysql 表中有标题 (varchar)、描述 (text)、关键字 (varchar) 字段。
我保留了关键字字段,因为我认为我只会在此字段中搜索。但我现在需要在所有三个字段中进行搜索。所以对于关键字“word1 word2 word3”,我的查询变成了
SELECT * FROM myTable
WHERE (
name LIKE '%word1%' OR description LIKE '%word1%' OR keywords LIKE '%word1%'
OR name LIKE '%word2%' OR description LIKE '%word2%' OR keywords LIKE '%word2%'
OR name LIKE '%word3%' OR description LIKE '%word3%' OR keywords LIKE '%word3%')
AND status = 'live'
看起来有点乱,但这很管用。但现在我需要实现同义词搜索。因此,对于给定的单词,假设有几个可用的同义词,当我遍历所有单词时,这个查询会变得更加混乱。随着要求越来越明确,我还需要将此 myTable 加入到其他一些表中。
所以
你觉得上面的方式比较乱,随着数据的增长会出问题吗?
如何避免上述混乱?我可以通过任何更清洁的解决方案吗?任何例子都会对我有所帮助。
- 您还有其他方法/技术可以推荐给我吗?
感谢
编辑
@Peter Stuifzand 建议我可以创建一个 search_index 表并在其上存储所有 3 个字段(标题、关键字、描述)信息并进行全文搜索。我知道,该表还将包括对 myTable 主键的引用。
但我的高级搜索可能包括将 mytable 与 Category 表、geographic_location 表(用于在 10、20 英里等范围内搜索)、按其他条件过滤,当然还有对搜索结果进行排序。你觉得用mysql全文不会拖慢吗?
【问题讨论】: