我目前正在使用MySQL但我愿意在必要时迁移到任何建议的解决方案。
我正在寻找一种在桌面上实现搜索的简单方法。
该表有多个条目,其数据类似于用户帐户上的内容,如姓名,地址,电话号码和包含任意长度注释的文本列。
我想进行搜索,以便我可以查看所有行和列,找到最匹配的行。略微错误纠正(不是很重要)。但最重要的是能够跨越搜索一切。
表可以有多达20,000行。
搜索参数将例如:“公司名字”
预期结果:
公司|联系名字|地址| ... | ...
示例2,略有拼写错误的搜索参数:“Pinaple Street Compani”
预期结果行:
公司| pinapple street | .. | ... 公司| pinapple street | .. | ... 公司| pinaple street | .. | ...
编辑:
忘了澄清多个搜索将同时进行,因此必须快速(同时进行大约100次搜索)。此外,数据的语言不是英语,数据库是utf8,支持非英语字符
答案 0 :(得分:0)
如果不是不可能的话,拼写错误的问题很难在纯MySQL中解决。
多列FULLTEXT
搜索并不是那么糟糕。
您的查询将如下所示......
SELECT column, column
FROM table
WHERE MATCH(Company, FirstName, LastName, whatever, whatever)
AGAINST('search terms' IN NATURAL LANGUAGE MODE)
它将产生一系列结果,按照MySQL猜测最有可能首先命中的结果排序。 MySQL的猜测并不是很好,但它们通常都足够了。
您需要一个与FULLTEXT
子句中的列列表匹配的MATCH()
索引。创建该索引就像这样。
ALTER TABLE book
ADD FULLTEXT INDEX Fulltext_search_index_1
(Company, FirstName, LastName, whatever, whatever);
尽管您的问题中有评论,但您只需要搜索要搜索的列组的索引。
对于任何最近的老式服务器硬件来说,20K行不会是一个很大的负担。
错误拼写:你可以试试SOUNDEX()
,但它是由贝尔系统设计的20世纪早期的算法,用美式英语查找人们的名字。它被设计为获得许多误报,并且它真的比一桶岩石更笨。
如果你真的需要拼写修正,你可能需要调查Sphinx。