首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能将()与我的全文索引中的一个列相匹配?

为什么我不能将()与我的全文索引中的一个列相匹配?
EN

Stack Overflow用户
提问于 2015-05-26 18:33:25
回答 1查看 81关注 0票数 0

以下是CREATE表:

代码语言:javascript
复制
CREATE TABLE `EntityAddresses` (
  `EntityAddress_ID` int(11) NOT NULL AUTO_INCREMENT,
  `Entity_ID` int(11) NOT NULL,
  `CreateDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `CreatedBy` int(11) NOT NULL,
  `UpdateDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `UpdatedBy` int(11) NOT NULL,
  `StreetAddress` varchar(150) NOT NULL DEFAULT '',
  `StreetAddress2` varchar(150) NOT NULL DEFAULT '',
  `City` varchar(50) NOT NULL DEFAULT '',
  `State` varchar(50) NOT NULL DEFAULT '',
  `PostalCode` varchar(30) NOT NULL DEFAULT '',
  `Country` varchar(50) NOT NULL DEFAULT '',
  PRIMARY KEY (`EntityAddress_ID`),
  KEY `Entity_ID` (`Entity_ID`),
  KEY `CreatedBy` (`CreatedBy`),
  KEY `UpdatedBy` (`UpdatedBy`),
  FULLTEXT INDEX `EntityAddresses_ibft_1` (`StreetAddress`,`StreetAddress2`,`City`,`State`,`PostalCode`,`Country`), 
  CONSTRAINT `EntityAddresses_ibfk_1` FOREIGN KEY (`Entity_ID`) REFERENCES `Entities` (`Entity_ID`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `EntityAddresses_ibfk_2` FOREIGN KEY (`CreatedBy`) REFERENCES `Users` (`User_ID`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `EntityAddresses_ibfk_3` FOREIGN KEY (`UpdatedBy`) REFERENCES `Users` (`User_ID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

下面是一个示例记录:

代码语言:javascript
复制
                       EntityAddress_ID: 5908
                              Entity_ID: 4514
                             CreateDate: 2015-05-25 13:59:43
                              CreatedBy: 2
                             UpdateDate: 2015-05-25 13:59:43
                              UpdatedBy: 2
                          StreetAddress: Testing 123
                         StreetAddress2: 
                                   City: Singapore
                                  State: 
                             PostalCode: 
                                Country: SG

下面是应该返回上面的示例记录的查询:

代码语言:javascript
复制
SELECT 
    *
FROM
    `EntityAddresses`
WHERE
    MATCH (`StreetAddress` , `StreetAddress2` , `City` , `State` , `PostalCode` , `Country`) AGAINST ('+SG' IN BOOLEAN MODE);

当我尝试使用"Singapore“代替"SG”的相同查询时,它返回一个结果集,其中包括上面的示例记录,但是"SG“什么也不返回。我试过其他国家,我得到了同样的结果,0排。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-26 19:28:44

MySQL全文引擎定义了索引中包含的最小字长。这是默认的3,这就是为什么它找不到您的文本SG

您可以更改MySQL服务器变量innodb_ft_min_token_size。对于新创建和重新创建的索引,更改将是可见的。

innodb_ft_min_token_size说:

存储在InnoDB全文索引中的单词的最小长度。增加这个值可以减少索引的大小,从而加快查询速度,方法是省略在搜索上下文中不太可能显着的常见单词,例如英文单词“a”和“to”。对于使用CJK (中文、日文、韩文)字符集的内容,请指定值1。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30466258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档