我正在使用MySQL全文搜索进行大量实验,并不确定它是否适合我。
在全文搜索之前,我正在使用LIKE
搜索,这提供了非常好的精度,但效率却有所下降。全文搜索是有效的,并且通过召回提供更多结果,这是好的。
我正在将全文搜索应用于名为value
的表格列。此列可能包含非常不同类型的信息,例如名字,姓氏或研究兴趣,或者您居住的地方。
当我喜欢搜索本专栏时,实际上我的结果确实很好。例如,让我说我正在寻找"Roger Federer", when I type
Rog Fed I am just find Roger Federer, but not
Roger Johnson等等。
对于全文搜索,我使用的是MySQL。我使用的模式是布尔值。在布尔模式下,您有许多选项,例如+
-
和*
。 +
表示我要找这个词必须。如果使用全文搜索应用相同的查询:
SELECT * FROM Mytable WHERE MATCH(value) AGAINST('+rod' '+fed' IN BOOLEAN MODE)
显然,此查询将无法返回结果。因为它正在寻找rod
和fed
。为了解决这个问题,我使用如下的asterix:
SELECT * FROM Mytable WHERE MATCH(value)AGAINST('* rod''* fed'IN BOOLEAN MODE)
这样可以正常工作,但它也会找到更多结果,如:
Roger Federer
Federer Johnson
John Roger
我的问题是,我无法确定用户是否输入了适当的搜索关键字。他们可能会输入一半的单词并可能期望看到他们想要的结果。在那些情况下,我不能使用+运算符,这就是为什么我应该*。在这种情况下,使用全文搜索是否是个好主意?