我在3列上使用带有mysql的全文搜索。假设数据如下:
现在,如果我用
查询SELECT * FROM trafficker.traffics WHERE MATCH (column1, column2) AGAINST ('Greater Noida');
上面的查询将导致前两行,因为匹配将在'Greater'和'Noida'上完成。在Row2的'Greater Kailash'中也可以找到'Greater':|
有什么方法可以阻止搜索“空间”并将大诺伊达视为一个搜索短语而不是用“空格”分隔?
这将非常有用,因为它可以帮助我过滤噪音,因为实际数据会非常庞大。
提前致谢!
修改 另一个问题是,如果我搜索Sector 91.它将只搜索Sector并忽略91(因为这少于4个字符)。有没有办法解决这个问题,除了下载源代码并编译它们。因为我确信它不能在共享服务器上运行:(
答案 0 :(得分:1)
检查'在布尔模式下'选项:
http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html
您可以将单词用引号括起来,例如:
SELECT * FROM trafficker.traffics WHERE MATCH (column1, column2) AGAINST ('"Greater Noida"' IN BOOLEAN MODE);
这应该让你接近你想要的。
答案 1 :(得分:1)
我们可以通过在布尔模式下搜索短语之前添加+和 - 来定义搜索的优先级
排除该字词 对于Eg
SELECT * FROM trafficker.traffics WHERE MATCH (column1, column2) AGAINST ('"+mobile -nokia"' IN BOOLEAN MODE);