0

我在 3 列上使用带有 mysql 的全文搜索。假设数据如下:

  1. 第 1 行包含两列,分别为“Greater Noida Expressway”和“Sector 91”。
  2. 第 2 行包含两列,分别为“Ho Chi Minh Marg”和“Greater Kailash 2”。
  3. 第 3 行包含两列,分别为“Rohini”和“Sector 91”

现在,如果我查询

SELECT * FROM trafficker.traffics WHERE MATCH (column1, column2) AGAINST ('Greater Noida'); 

上面的查询将产生前两行,因为匹配将在“Greater”和“Noida”上完成。在第 2 行的“Greater Kailash”中也可以找到“Greater”:|

有什么办法可以阻止对“空间”的搜索,并将大诺伊达视为一个搜索词组,而不是用“空间”分隔?

这将非常有用,因为它将帮助我过滤噪声,因为实际数据将非常庞大..

提前致谢!

编辑: 另一个问题是,如果我搜索扇区 91。它只会搜索扇区并忽略 91(因为它少于四个字符)。除了下载源代码并编译之外,还有什么方法可以解决这个问题。因为我确信它不会在共享服务器上工作:(

4

2 回答 2

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); 

这应该让你接近你想要的。

于 2012-09-05T14:20:18.977 回答
1

我们可以通过在布尔模式下在搜索短语之前添加 + 和 - 来定义搜索的优先级

  • 包括那个词
  • 排除这个词 For Eg

    SELECT * FROM trafficker.traffics WHERE MATCH (column1, column2) AGAINST ('"+mobile -nokia"' IN BOOLEAN MODE);

于 2013-05-30T12:11:32.313 回答