假设我有一个名为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确实支持中文全文搜索。那么,有人可以给我一个建议吗?
答案 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/