2010-01-06 57 views
8

我需要对另一个表中的列中的一大堆值进行全文搜索。由于MATCH()需要AGAINST()部分中的值,所以直接:“SELECT a.id FROM a,b WHERE MATCH(b.content)AGAINST(a.name)”失败并显示“AGAINST的参数不正确”。针对列值的MySQL全文搜索?

现在,我知道我可以编写一个脚本来查询名称列表,然后搜索它们,但我宁愿制定一个更复杂的查询,以便一次处理它。它也不需要很快。

想法?

感谢

回答

3

不幸的是,http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html说:

搜索字符串必须是一个字符串值,查询评估过程中保持不变。这就排除了,例如,一个表列,因为它对每一行都不相同。

看起来你必须一次搜索一个模式,如果你使用MySQL的FULLTEXT索引作为你的搜索解决方案。

我能想到的唯一替代方法是允许搜索许多模式,如您所描述的是倒数索引。虽然这不像真正的全文搜索技术那样灵活或可扩展。

见我的介绍http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql

+1

是的,我已经看到了,但http://dev.mysql.com/tech-resources/articles/full-text-revealed.html说:“”的说法来反对()必须是一个常量字符串“这是没有什么可担心的,我们只是没有更新手册,但如果使用MySQL版本5,则还没有显示AGAINST()参数可以是变量或参数。我希望有人会使用某种更复杂的SQL方法(视图,过程或其他)提供一些建议。 其实,我所要做的就是基本上建立表b中文本列中出现的表a的倒数索引。 – 2010-01-06 18:43:23

+1

该文章来自2004年5月,但他们*仍然*没有更新手册?!太可悲了! – 2010-01-06 19:09:00

+0

说一下全文到mysql的重要性,我想。我发现自己最近学习了Squid,但这是项目的一个侧面,我真的没有系统变化的意图。 – 2010-01-07 07:01:40