【问题标题】:BOOLEAN Search MySQL not working for certain wordsBOOLEAN 搜索 MySQL 不适用于某些单词
【发布时间】:2012-10-05 14:16:24
【问题描述】:

我在进行布尔搜索时遇到问题,首先我认为我的数据库/表有问题,但后来我尝试使用 1 列和示例值创建以下示例表,结果相同,它成功运行了一些单词和对其他人来说失败了,有什么想法吗?

成功运行的查询:

SELECT * FROM `temp` WHERE (match (txt) against ('develo*' IN BOOLEAN MODE)>0 ) 
SELECT * FROM `temp` WHERE (match (txt) against ('devel*' IN BOOLEAN MODE)>0 ) 
SELECT * FROM `temp` WHERE (match (txt) against ('senio*' IN BOOLEAN MODE)>0 ) 

但是当我尝试对“第二”或“第三”进行类似的搜索时,它会失败

SELECT * FROM `temp` WHERE (match (txt) against ('secon*' IN BOOLEAN MODE)>0 ) 
SELECT * FROM `temp` WHERE (match (txt) against ('third*' IN BOOLEAN MODE)>0 ) 

--- 以下是示例表和值-----

CREATE TABLE IF NOT EXISTS `temp` (
  `txt` varchar(30) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Dumping data for table `temp`
--

INSERT INTO `temp` (`txt`) VALUES
('developer'),
('Developer'),
('Developer senior'),
('senior developer'),
('second job'),
('job second'),
('third'),
('third job'),
('job third');

【问题讨论】:

    标签: mysql search boolean


    【解决方案1】:

    由于 stopwords list 在 BOOLEAN MODE 匹配中应用,单词 secondthird 只会被引擎忽略。

    您可以使用自己的替换默认停用词列表,如here 所述:

    要覆盖默认的停用词列表,请设置 ft_stopword_file 系统 多变的。 [...] 变量值应该是文件的路径名 包含停用词列表,或用于禁用停用词的空字符串 过滤。服务器在数据目录中查找文件,除非 给定一个绝对路径名以指定不同的目录。后 更改此变量的值或停用词的内容 文件,重新启动服务器并重建您的 FULLTEXT 索引。

    【讨论】:

    • 跟进:“some”或“then”等常用词是停用词,如果出现在搜索字符串中,则不匹配。
    • @BradChristie 我提供了该列表的链接,因此决定不在这里引用它们。 ) 但你是对的,当然;停用词列表是被视为“太常见”而无法匹配它们的单词列表。
    • 谢谢,这肯定会有所帮助,但是您是否碰巧知道可能导致这种行为的原因.. 如果我的数据中有一个术语或单词“td”,并且我使用诸如搜索之类的引号进行搜索: "td" data: '这是样本 td 数据' .. 它不会带来结果
    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多