【发布时间】:2011-05-12 04:11:57
【问题描述】:
我想在 MySql 中使用 match against 在 state 字段中搜索那些不包含“rajasthan”的行。
我的查询是这样的:
SELECT * from member where MATCH(state) AGAINST('-rajasthan' IN BOOLEAN MODE)
但是,它返回一个空的结果集。
这有什么问题?
【问题讨论】:
我想在 MySql 中使用 match against 在 state 字段中搜索那些不包含“rajasthan”的行。
我的查询是这样的:
SELECT * from member where MATCH(state) AGAINST('-rajasthan' IN BOOLEAN MODE)
但是,它返回一个空的结果集。
这有什么问题?
【问题讨论】:
我相信这会成功:
SELECT
*
FROM
Member
WHERE
NOT MATCH (state) AGAINST ('+rajasthan' IN BOOLEAN MODE)
来源:"Show all except" in MySQL Boolean Full-Text Searches
小心 - 我相信这会进行全表扫描,并且此查询不会像您希望的那样从全文索引中受益。
至于你的空结果:
注意:- 运算符仅用于排除与其他搜索词匹配的行。因此,仅包含以 - 开头的术语的布尔模式搜索返回空结果。它不会返回“除包含任何排除项的行之外的所有行。”
【讨论】:
- 运算符仅用于排除与其他搜索词匹配的行。因此,仅包含以 - 开头的术语的布尔模式搜索返回空结果。它不会返回“除包含任何排除项的行之外的所有行。”
因此,请尝试将 OR 1 = 1 附加到您的查询中,以便查询返回您的所有记录而无需 MATCH 运算符
【讨论】: