首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mySQL全文学习

mySQL全文学习
EN

Stack Overflow用户
提问于 2011-10-03 19:41:57
回答 1查看 78关注 0票数 1

我正在使用php和mySQL创建一个在线常见问题类型的系统。下面的SQL用于根据用户输入的$term查找相关问题。

当用户搜索某项内容并单击相关问题以显示答案时,他们将有机会根据所搜索的内容对给定的问题进行评分。

SQL的第一部分从实际的问题表中获取相关的问题ID。第二部分查看评分表,并尝试匹配人们之前搜索的内容,以找到相关的问题ID。

然后使用这些结果的联合来获得存储在数据库中的实际问题标题。

代码语言:javascript
复制
(SELECT id_question, 
MATCH(question, tags) AGAINST ('%$term%') as rank
FROM question
WHERE MATCH(question, tags) AGAINST ('%$term%')
AND category = '$category')

UNION

(SELECT id_question,  
MATCH(customer_search_query) AGAINST ('%$term%') as rank
FROM rating
WHERE MATCH(customer_search_query) AGAINST ('%$term%')
AND (customer_rating = 1))
ORDER BY rank DESC LIMIT 5;");

我遇到的问题是系统没有真正正确地学习。例如,如果我键入"three users",系统将在问题表中找到匹配项。

如果我键入"3 users",系统将在问题表中找到匹配项(基于关键字"users")。如果我点击“是,这回答了我的问题”,它会在评级表中存储"3个用户“,将其与问题”3个用户“相关联。

问题是"3“只与”三个用户“相关联。在这种情况下,有没有办法将数字3与单词“3”的每个实例相关联?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-03 19:54:38

在自然语言模式(默认)下,您不能在match against中使用通配符。

请改用以下查询:

代码语言:javascript
复制
(SELECT id_question, 
MATCH(question, tags) AGAINST ('$term') as rank
FROM question
WHERE MATCH(question, tags) AGAINST ('$term')
AND category = '$category')

UNION ALL   <<-- faster than UNION.

(SELECT id_question,  
MATCH(customer_search_query) AGAINST ('$term') as rank
FROM rating
WHERE MATCH(customer_search_query) AGAINST ('$term')
AND (customer_rating = 1))
ORDER BY rank DESC LIMIT 5;");

您可以使用搜索修饰符in boolean mode进行搜索。

此外,匹配对象将不会搜索停用词和少于4个字符的单词。

当您使用$term = "3 users"时,MySQL将只查找users而忽略3

如果你想搜索3,你必须返回到LIKE '% 3 %'

请参见:

http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

http://dev.mysql.com/doc/refman/5.0/en/fulltext-stopwords.html

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

https://stackoverflow.com/questions/7634486

复制
相关文章

相似问题

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