MySQL精确短语匹配

时间:2014-07-01 15:37:08

标签: python mysql sql python-2.7 mysql-python

我正在使用python和mysqldb模块在数据库中搜索用户输入。 我测试了python并建立了与服务器和数据库的连接。这是SQL代码给我带来的麻烦。 我的SQl如下:

SELECT * FROM panda WHERE MATCH(Question) AGAINST('"{0}"')

我正在使用python,因此{0}是用户输入。那个位有效。由于某种原因,它与数据库中的列中的确切短语不匹配。例如,如果用户输入“See you”,则数据库将其匹配为“我想看到你”,而不仅仅是“看到你”。有没有办法得到具体的短语?我尝试使用布尔模式和正则表达式,但它们不起作用。

编辑:谢谢大家。你的所有方法都有效,结果我没有正确地格式化SQL。抱歉没问题。

4 个答案:

答案 0 :(得分:1)

那么为什么不使用WHERE问题='" {0}"'

答案 1 :(得分:1)

这是如何使用python和sql一起搜索某个列'Question',其值等于inputVar并获取行中的整个条目。

import MySQLdb
db = MySQLdb.connect("localhost", "root", "password", "MY_DATABASE")
cursor=db.cursor()

sql="SELECT * FROM MY_TABLE WHERE Question = '%s';" %inputVar; 
    try:      
        cursor.execute(sql)
        row = cursor.fetchall()
        print row[0] #assuming 1st column is 'Question' column.
        db.commit()
    except:
        print ("ROLLBACK!!!")
        db.rollback()

答案 2 :(得分:0)

查看MATCH ... AGAINST的文档。你想要的是一个简单的比较,尝试这样的事情:

SELECT * FROM panda WHERE Question = {0};

答案 3 :(得分:0)

MATCH ... AGAINST,也称为FULLTEXT搜索,正在按照您的设计执行。其目的是挖掘大量文本并查找包含查询匹配文本的行。

请注意,FULLTEXT索引只能看到列中文本的前750个左右字符。

这是有用的功能,因为即使文本中出现随机标点符号或其他单词,它也能正常工作。 WHERE column = 'value'要求完全匹配。

您可以尝试此查询:它将大致以增加的长度顺序显示结果。这将按照结果的顺序在“我想见到你”之前推动“看见你”。

SELECT * 
  FROM panda
 WHERE MATCH(Question) AGAINST('"{0}"')
 ORDER BY CEIL(LOG2(LENGTH(Question))) ASC,
       MATCH(Question) AGAINST('"{0}"')

请注意,当您在MATCH(Question) AGAINST('"{0}"')SELECT子句中使用匹配项时,表达式ORDER BY会生成一个数字,指定匹配的紧密程度。

另请注意,CEIL(LOG2(LENGTH(Question)))子句中的表达式ORDER BY会根据长度将结果分组。它将长度分为3-4,然后长度为5-8,9-16,等等。