我目前的查询:
SELECT SCHOOL_NAME, TOWN, POSTCODE, COUNTRY, COUNTY, id FROM schools
WHERE MATCH(LA_NAME, SCHOOL_NAME, STREET, LOCALITY, ADDRESS3, TOWN, COUNTY)
AGAINST ("southwark") AND COUNTRY = 'gb' limit 0,5;
正在返回(删除了一些数据以保持理智):
Southwark Park School
The Cathedral School of St Saviour and St Mary Ove...
Harris Academy Bermondsey
Southwark Inclusive Learning Service KS3, KS4 & Si...
St George's Cathedral Catholic Primary School
请注意,这些结果中不包括 Southwark Primary School
如果我做这个查询
SELECT SCHOOL_NAME FROM schools WHERE `SCHOOL_NAME` LIKE '%southwark%' LIMIT 0 , 3
我返回的响应是
City of London Academy (Southwark)
Southwark Primary School
Southwark Park School
关键点:Southwark Primary School 可在此处的结果中找到。这是自然语言搜索结果中缺少的内容。
解释显示:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE schools fulltext LA_NAME LA_NAME 0 1 Using where
因此,由于某种原因,自然语言搜索的性能不如预期,我尝试过使用布尔模式,但这不起作用。谁能阐明我可能做错了什么?
注意:如果我将第一个查询的限制更改为 0,50,我仍然看不到 Southwark 小学。
编辑:如果我将自然语言搜索更改为限制 0,240,我会得到结果 #238。
编辑#2
myisam_ftdump mydatabase/schools 1 -c | grep southwark
回报:
108 7.7915840 southwark
更新:所以看起来 LA_NAME 的值是 Southwark,所以很多值都包含它。我使用 myisam_ftdump 来隔离这个问题。我现在可以考虑修复。
已修复:因此,为了解决此问题,我必须修改全文以不包含 LA_NAME,我还删除了一些其他数据,这些数据实际上并不需要 IE 邮政编码。我还修改了我的 MySQL 查询以不再使用我删除的字段。