【问题标题】:MySQL query - weight-based search engineMySQL 查询 - 基于权重的搜索引擎
【发布时间】:2011-10-30 05:20:35
【问题描述】:

这是一个医疗 MIS 表的数据库结构:

CREATE TABLE IF NOT EXISTS `ab_med` (
  `med_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `med_title` varchar(200) DEFAULT NULL,
  `med_posted_date` varchar(200) DEFAULT NULL,
  `med_company_name` varchar(200) DEFAULT NULL,
  `med_experience` varchar(200) DEFAULT NULL,
  `med_salary` varchar(200) DEFAULT NULL,
  `med_city` varchar(200) DEFAULT NULL,
  `med_description_short` text,
  `med_details_link` varchar(500) DEFAULT NULL,
  `med_from_city_type` int(1) NOT NULL DEFAULT '1',
  `med_from_city` varchar(255) DEFAULT NULL,
  `med_collected_time` datetime DEFAULT NULL,
  `med_status` int(1) NOT NULL,
  PRIMARY KEY (`med_id`),
  KEY `MedCity` (`med_city`),
  KEY `MedTitle` (`med_title`),
  KEY `MedCompany` (`med_company_name`),
  KEY `MedExperience` (`med_experience`),
  KEY `med_details_link` (`med_details_link`),
  FULLTEXT KEY `med_index` (`med_title`,`med_company_name`,`med_description_short`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=639295 ;

大约有 50 万条记录。用户可以使用 2 个字段进行搜索:

  1. 关键字
  2. 位置

关键字根据分数查看med_titlemed_company_namemed_description_shortmed_city

位置查看med_city

我使用了全文 mysql 搜索,但我需要最近的条目才能以更高的分数显示。我没有得到它的 SQL 查询。我正在使用以下 SQL 查询:

SELECT distinct(med_details_link),med_id,med_title,med_posted_date,med_company_name,med_description_short,med_from_city,med_experience,med_city,med_collected_time,MATCH (med_title,med_company_name,med_description_short) AGAINST ('+hello +world' IN BOOLEAN MODE) as score
FROM ab_med
WHERE MATCH (med_title,med_company_name,med_description_short) AGAINST ('+hello +world' IN BOOLEAN MODE) order by med_id desc limit 1000

假设我搜索“hello world”,我理解应该有权重基于:

  1. 标题的权重最高
  2. 公司名称的权重小于标题但大于描述
  3. 描述的权重最小

请帮助获取 SQL 查询以考虑所有这些权重并进行有效搜索。

【问题讨论】:

    标签: mysql optimization search-engine


    【解决方案1】:

    考虑求助于 Sphinx 以获得对这个问题的满意解决方案。

    如果有 500 万行,再加上您的要求,MySQL 全文搜索的性能将令人失望。

    【讨论】:

    • 即使有 50 万条记录,您也会提出相同的建议吗?不过,数据库将继续增长。另外,关于我的具体案例使用狮身人面像的任何具体信息?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2015-06-21
    • 1970-01-01
    相关资源
    最近更新 更多