我有一个为美国加载geonames's data的数据库。我想在该表上执行查询,以从与Google地图具有或多或少相同功能的单个输入中找到最接近的匹配(即,用户可以输入邮政编码,逗号分隔的分层地址,如'Nevada,Las拉斯维加斯'或两者兼而有之。)
到目前为止,我已将FULLTEXT索引添加到表的相关字段中,并从输入执行查询,如下所示:
SELECT * FROM places WHERE MATCH(country_code, postal_code, place_name, admin_name1, admin_code1, admin_name2, admin_code2) AGAINST (?);
在哪里?由php脚本输入替换。尽管它有点工作,它没有按预期执行,它没有把最相关的匹配放在第一位,需要一个完整的单词才能开始找到匹配(我尝试使用通配符但情况更糟)。我也尝试拆分输入,如果它有逗号,但查询的逻辑开始变得混乱,无法生成性能更好的脚本。
有没有办法以如此广泛的匹配条件搜索此数据库?
我正在通过AJAX查询数据库所以我需要它来开始搜索,即使这个词还没有完成(我正在使用jQuery的预先输入)。
提前致谢!
答案 0 :(得分:0)
将Weka_control
文字替换为您的文字。
string_to_be_searched
答案 1 :(得分:0)
FULLTEXT(country_code, postal_code, place_name, admin_name1...)
会让你的MATCH
工作。但是......请注意FULLTEXT的局限性:它只搜索"单词"一些最小字长,
答案 2 :(得分:0)
您正在做的是搜索匹配的寄存器,但您没有订购它们。
尝试这样的事情:
SELECT *, MATCH(country_code, postal_code, place_name, admin_name1, admin_code1, admin_name2, admin_code2) AGAINST (?) AS relevance FROM places WHERE MATCH(country_code, postal_code, place_name, admin_name1, admin_code1, admin_name2, admin_code2) AGAINST (?) ORDER BY relevance DESC;