从数据库中进行全文搜索

时间:2010-09-09 09:58:41

标签: mysql database full-text-search

假设我有一个名为DB的MySQL数据库和一个名为ContactInfo的表。以下是其结构和一些示例数据(仅一个项目):

表----的ContactInfo:


-----------------------------------------------------------
name  fullname                                       phone
-----------------------------------------------------------
NASA  National Aeronautics and Space Administration  00000
-----------------------------------------------------------

现在我想使用以下方式搜索“ContactInfo”表下的数据:

1)无论我输入“美国宇航局”或“国家航空航天局”或电话号码,都应该将右侧(在此例外,只是第一行)退回给我。

2)当我进入“国家航空管理局”或“国家航天局”或“美国航空航天局”或“美国航空航天局”时,数据库中没有完全匹配,但第一行应退回因为第一行中的内容与请求的字符串相关。

两种方式可以看作是模糊的搜索。

我考虑使用“完整上下文搜索”,例如“Hpyer estraier”和“Lucene”。但是我发现我的要求或多或少都不同。

当使用“Hyper estraier”或“Lucene”时,首先根据解析的纯文本构建索引。然后开始搜索。

这是否意味着我应该将数据库中的数据更改为多个纯文本文件(表中的每条记录为单个文件),然后根据这些文件构建索引?

BTW,我刚刚发现MySQL支持全文搜索,但是我们必须处理一些中文字符,但似乎mysql确实支持中文全文搜索。

那么,有人可以给我一个建议吗?

2 个答案:

答案 0 :(得分:0)

你可以为此目的使用这样的东西:

SELECT *
  FROM `ContactInfo`
 WHERE `name` LIKE '%your-query%'
    OR `fullname` LIKE '%your-query%'
    OR `phone` LIKE '%your-query%'

为了支持您的案例#2,您需要将your-query中的所有空格替换为% - 字符,以允许输入的字词之间的任何字符组合。请记住转义用户输入以防止SQL注入。

将所有数据放入(单独的)文本文件中似乎对存储数据非常不合理。

答案 1 :(得分:0)

您可以将sphinx与mysql结合使用。 sphinx是一个独立的工具,但它有一个mysql代理模式,它基本上像一个mysql服务器,可以用任何mysql连接器查询。 或者,作为替代方案,有一个用于mysql的sphinx存储引擎插件,它允许您使用当前的mysql连接查询sphinx并对其他表执行连接。

绝对不是一个彻头彻尾的肮脏解决方案,但值得进一步研究:http://sphinxsearch.com/

相关问题