0

在我的 Mysql DB 中,我有一个术语列表,例如(首字母大写和大多数情况下是复数)

Hairdressers
Restaurants
Beauty Salons 
Fournitures For Restaurants

在我的网站上,我有一个搜索栏,用户可以在其中搜索这些词(我的网站是一种 POI 查找器)。但我的查询有问题。

SELECT * FROM TABLE WHERE word = 'userword'

1:如果用户输入餐馆,它不起作用,因为他把'r'放在小写上。2:如果用户进入餐厅是因为他没有把它放在复数形式

我试过了SELECT * FROM TABLE WHERE word like 'userword'

这解决了大写字母的问题,但我不知道当用户输入单数单词时如何使查询工作。唯一的解决方案是在数据库中添加那个词吗?

谢谢

4

3 回答 3

3

也许最好使用一个匹配复数名称测试的正则表达式,只在单词末尾添加一个 s:

SELECT * FROM table where word REGEXP '^userword[s]?'

请注意,默认情况下,MySQL 中的正则表达式匹配不区分大小写。

于 2011-11-13T10:14:24.680 回答
1

最好的解决方案是为此使用适当的搜索引擎,该搜索引擎将使用适当的分析器和词干分析器,以便为用户提供高质量的结果。这样的搜索引擎是lucene,如果您不想处理实现细节,您可以使用Solr,它是一个搜索服务器。

于 2011-11-13T11:01:01.940 回答
1

当您使用 LIKE 时,您可以使用 % 来表示通配符

所以:

SELECT * FROM table where word like '%userword%'

火柴:

userword, userwords, superuserwords, ...

但是如果你这样使用 LIKE (注意额外的 s):

SELECT * FROM table where word like '%userwords%'

它不匹配

userword, superuserword, ...
于 2011-11-13T10:08:09.797 回答