如何在SQL表中搜索短语

时间:2017-01-26 01:02:58

标签: mysql

我目前正在使用MySQL但我愿意在必要时迁移到任何建议的解决方案。

我正在寻找一种在桌面上实现搜索的简单方法。

该表有多个条目,其数据类似于用户帐户上的内容,如姓名,地址,电话号码和包含任意长度注释的文本列。

我想进行搜索,以便我可以查看所有行和列,找到最匹配的行。略微错误纠正(不是很重要)。但最重要的是能够跨越搜索一切。

表可以有多达20,000行。

搜索参数将例如:“公司名字”

预期结果:

  

公司|联系名字|地址| ... | ...

示例2,略有拼写错误的搜索参数:“Pinaple Street Compani”

预期结果行:

  公司| pinapple street | .. | ...   公司| pinapple street | .. | ...   公司| pinaple street | .. | ...

编辑:

忘了澄清多个搜索将同时进行,因此必须快速(同时进行大约100次搜索)。此外,数据的语言不是英语,数据库是utf8,支持非英语字符

1 个答案:

答案 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。