0

是否可以使用 Match / Against 匹配关键字,但如果它出现在特定短语中则不行?

例如,如果我想匹配“狗”而不是“热狗”:

“这是一条狗”应该匹配。

“这是热狗”不应该匹配。

“A hot dog is not a dog”应该匹配,因为第二个“dog”不是“hot dog”的一部分。

我的应用程序在大型数据库(约 10 万条记录)中搜索用户定义的数百个关键字,因此此查询的性能很重要。

编辑:我只想匹配整个单词,而不是作为另一个单词的一部分出现的关键字。

4

1 回答 1

1

如果你首先replace出现所有的hot dogwith''然后对结果执行matchwith ,那么'dog'你应该到达那里。就像是:

SELECT * FROM mytable WHERE MATCH (REPLACE(mycol,'hot dog','')) AGAINST ('dog');

刚刚尝试过,MATCH似乎工作方式不同。它要求目标列上存在全文索引,并且只有它们才能被命名为函数的参数MATCH。因此:我的方法不起作用。但是关于

SELECT * FROM mytable WHERE REPLACE(mycol,'hot dog','') like '%dog%';

好的,那么也许这会有所帮助

SELECT * FROM mytable WHERE REPLACE(mycol,'hot dog','') regexp '[[:<:]]dog[[:>:]]'

在仅查找那些'dog'单独的单词的情况下?

于 2015-05-31T13:31:00.270 回答