php - MYSQL全文索引存在但显示错误1191

标签 php mysql

在升级到 3.0 版之前,我在早期版本的 Wamp Server (2.5) 中成功使用了以下查询。

此查询在实际服务器上运行良好,但在本地服务器上失败。我认为表可能有问题,因此将所有实际服务器表导入到本地服务器但仍然无法正常工作。

我非常确定所有索引都存在并且所有表都在使用 MyISAM 引擎。

索引列表:

1) e_pj_keywords uk 表中的 uk.Keyword_Name

2) post_jobs 表中的 a.company_name & a.company_type

3) 位置j表中的j.location_name

我已经引用了stackoverflow & google的所有问题来解决这个错误但是不能。

还为所有相关表启用了 KEYS,但没有任何效果。

Can't find FULLTEXT index matching the column list

我知道会有非常小的错误,但无法捕捉到它。请帮忙。

下面是我的查询

SELECT SQL_CALC_FOUND_ROWS
*
FROM
(SELECT 
    a.job_id,
        a.Employer_ID,
        a.Sub_user_id,
        DATE_FORMAT(a.creation_on, '%d-%m-%Y') AS Created_date,
        DATEDIFF(CURDATE(), MAX(a.creation_on)) AS Posted_days,
        a.Job_type,
        a.Designation,
        a.Open_Positions,
        a.Job_Description,
        a.Min_age,
        a.Max_age,
        a.min_exp,
        a.max_exp,
        a.Hide_Salary,
        a.company_name,
        a.company_type,
        a.About_Company,
        a.Contact_person_name,
        a.Contact_No,
        a.Refresh_type,
        a.Response_type,
        a.Job_status,
        DATEDIFF(CURDATE(), MAX(a.creation_on)) AS Days_last_Login,
        (SELECT GROUP_CONCAT(DISTINCT g.Education ORDER BY pjedu.Education_ID SEPARATOR ', ') user_education
            FROM e_pj_edu pjedu INNER JOIN education g ON FIND_IN_SET(g.Edu_ID, pjedu.Education_ID)
            WHERE a.job_id = pjedu.Job_ID LIMIT 1
        ) AS Education,
        (SELECT GROUP_CONCAT(DISTINCT h.FA_description ORDER BY uf.FA_ID SEPARATOR ', ') FA
            FROM e_pj_fa uf INNER JOIN functional_area h ON FIND_IN_SET(h.FA_ID, uf.FA_ID)
            WHERE a.Job_ID = uf.Job_ID LIMIT 1
        ) AS FA_description,
        (SELECT GROUP_CONCAT(DISTINCT i.Industry_description ORDER BY ui.Industry_ID SEPARATOR ', ') Industry_ID
            FROM e_pj_industry ui INNER JOIN industry i ON FIND_IN_SET(i.Industry_ID, ui.Industry_ID)
            WHERE a.Job_ID = ui.Job_ID LIMIT 1
        ) AS Industry_description,
        (SELECT GROUP_CONCAT(DISTINCT j.location_name ORDER BY upl.Location_ID SEPARATOR ', ') Location_ID
            FROM e_pj_locations upl INNER JOIN locations j ON FIND_IN_SET(j.location_id, upl.Location_ID)
            WHERE a.Job_ID = upl.Job_ID LIMIT 1
        ) AS location_name,
        (SELECT GROUP_CONCAT(DISTINCT uk.Keyword_Name ORDER BY uk.Keyword_ID SEPARATOR ', ') keyskills
            FROM e_pj_keywords uk WHERE a.Job_ID = uk.Job_ID LIMIT 1
        ) AS Keyword_Name,
        GROUP_CONCAT(DISTINCT cc.salary_description ORDER BY cc.salary_ID SEPARATOR ', ') Min_salary,
        GROUP_CONCAT(DISTINCT dd.salary_description ORDER BY dd.salary_ID SEPARATOR ', ') Max_salary
FROM
    post_jobs a
INNER JOIN user_salary cc ON FIND_IN_SET(cc.salary_ID, a.Min_salary)
INNER JOIN user_salary dd ON FIND_IN_SET(dd.salary_ID, a.Max_salary)
GROUP BY a.Job_id) aa
WHERE
MATCH (Keyword_Name) AGAINST ('"operation","mis","facility","sales"' IN BOOLEAN MODE)
OR MATCH (company_name, Designation) AGAINST ('"operation","mis","facility","sales"' IN BOOLEAN MODE)
AND max_exp <= 11
AND MATCH (location_name) AGAINST ('"delhi","mumbai","navi,mumbai"' IN BOOLEAN MODE)
AND Job_status = 'Active'
ORDER BY aa.Created_date DESC
LIMIT 0 , 25

显示相关表的创建

e_pj_keywords   CREATE TABLE `e_pj_keywords` (
`Keyword_ID` bigint(18) NOT NULL AUTO_INCREMENT,
`Job_ID` int(10) NOT NULL,
`Keyword_Name` varchar(100) NOT NULL,
 PRIMARY KEY (`Keyword_ID`),
 KEY `Job_ID` (`Job_ID`),
 FULLTEXT KEY `Keyword_Name` (`Keyword_Name`)
 ) ENGINE=MyISAM AUTO_INCREMENT=1404 DEFAULT CHARSET=latin1


post_jobs   CREATE TABLE `post_jobs` (
`Job_id` int(10) NOT NULL AUTO_INCREMENT,
`Designation` text,
`Company_Name` varchar(1000) NOT NULL,
`company_type` varchar(100) DEFAULT NULL,
PRIMARY KEY (`Job_id`),
FULLTEXT KEY `Company_Name` (`Company_Name`),
FULLTEXT KEY `Designation` (`Designation`)
) ENGINE=MyISAM AUTO_INCREMENT=176 DEFAULT CHARSET=latin1     


locations   CREATE TABLE `locations` (
`location_id` int(10) NOT NULL,
`location_name` varchar(100) NOT NULL,
`Nation` varchar(50) DEFAULT NULL,
PRIMARY KEY (`location_id`),
FULLTEXT KEY `location_name` (`location_name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

最佳答案

鉴于这些表格描述,这是您的问题:

OR MATCH (company_name, Designation) AGAINST 
            ^^^^^^^^^^^^^^^^^^^^

您没有包含这两个字段的任何单个 FULLTEXT 索引。 MySQL 不会将两个单独的全文索引组合在一起进行查询 - 如果您正在执行多字段 match,则必须有一个在同一索引中包含这两个字段的 SINGLE 全文索引。

您必须为每个索引拆分匹配项,或者创建一个包含这两个字段的新索引,例如

... MATCH 'foo' AGAINST (company_name) OR MATCH 'foo' AGAINST (desgination)

FULLTEXT KEY `foo` (company_name, designation)

关于php - MYSQL全文索引存在但显示错误1191,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36338469/

相关文章:

php - 从 curl 或 get_video_info 抓取 youtube 视频 URL

php - 如何使用php将mysql数据库表数据转换成json

php - 处理字符编码的 Twitter 响应

java - 使用 PHP 和 mysql 构建 Android 登录

java - 如何获取从单个 IP 登录的所有 UUID(MySQL 数据库 [Minecraft])

javascript - 映射 csv 以在 React 中显示数组中的每个项目

php - 将分数转换为单词

mysql - 查找多次下单的订单(SQL查询)

java - 具有两个抽象类的 JPA 继承

php - 第一个具有多个 where 子句的左连接(左表)