是否可以使用 Match / Against 匹配关键字,但如果它出现在特定短语中则不行?
例如,如果我想匹配“狗”而不是“热狗”:
“这是一条狗”应该匹配。
“这是热狗”不应该匹配。
“A hot dog is not a dog”应该匹配,因为第二个“dog”不是“hot dog”的一部分。
我的应用程序在大型数据库(约 10 万条记录)中搜索用户定义的数百个关键字,因此此查询的性能很重要。
编辑:我只想匹配整个单词,而不是作为另一个单词的一部分出现的关键字。
是否可以使用 Match / Against 匹配关键字,但如果它出现在特定短语中则不行?
例如,如果我想匹配“狗”而不是“热狗”:
“这是一条狗”应该匹配。
“这是热狗”不应该匹配。
“A hot dog is not a dog”应该匹配,因为第二个“dog”不是“hot dog”的一部分。
我的应用程序在大型数据库(约 10 万条记录)中搜索用户定义的数百个关键字,因此此查询的性能很重要。
编辑:我只想匹配整个单词,而不是作为另一个单词的一部分出现的关键字。
如果你首先replace
出现所有的hot dog
with''
然后对结果执行match
with ,那么'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'
单独的单词的情况下?