【问题标题】:Running Full Search on a mysql Table在 mysql 表上运行完整搜索
【发布时间】:2020-04-27 15:40:34
【问题描述】:

所以我的“mysql 数据库”中已经有一个名为“profiles”的表。我正在尝试根据文本搜索搜索其上的记录/记录。我尝试运行全文搜索,但它没有给我任何东西:

import pymysql
mydb = pymysql.connect( host = 'a' ,  user ="b" ,  passwd = "x" , db = "project_db")  
cursor = mydb.cursor() 

query = """SELECT * FROM profiles WHERE MATCH(c1, c2, c3, c4, c5, c6, c7, c8)
AGAINST('cycle owner' IN NATURAL LANGUAGE MODE)"""

cursor.execute(query)
res = cursor.fetchall()

for r in res:
    print(r)
cursor.close()
mydb.commit()
mydb.close()

输出如下:

---------------------------------------------------------------------------
InternalError                             Traceback (most recent call last)
<ipython-input-16-86948bcd8c0b> in <module>
      6 AGAINST('cycle owner' IN NATURAL LANGUAGE MODE)"""
      7 
----> 8 cursor.execute(query)
      9 res = cursor.fetchall()
     10 

D:\Softwares\Anaconda\lib\site-packages\pymysql\cursors.py in execute(self, query, args)
    168         query = self.mogrify(query, args)
    169 
--> 170         result = self._query(query)
    171         self._executed = query
    172         return result

D:\Softwares\Anaconda\lib\site-packages\pymysql\cursors.py in _query(self, q)
    326         self._last_executed = q
    327         self._clear_result()
--> 328         conn.query(q)
    329         self._do_get_result()
    330         return self.rowcount

D:\Softwares\Anaconda\lib\site-packages\pymysql\connections.py in query(self, sql, unbuffered)
    515                 sql = sql.encode(self.encoding, 'surrogateescape')
    516         self._execute_command(COMMAND.COM_QUERY, sql)
--> 517         self._affected_rows = self._read_query_result(unbuffered=unbuffered)
    518         return self._affected_rows
    519 

D:\Softwares\Anaconda\lib\site-packages\pymysql\connections.py in _read_query_result(self, unbuffered)
    730         else:
    731             result = MySQLResult(self)
--> 732             result.read()
    733         self._result = result
    734         if result.server_status is not None:

D:\Softwares\Anaconda\lib\site-packages\pymysql\connections.py in read(self)
   1073     def read(self):
   1074         try:
-> 1075             first_packet = self.connection._read_packet()
   1076 
   1077             if first_packet.is_ok_packet():

D:\Softwares\Anaconda\lib\site-packages\pymysql\connections.py in _read_packet(self, packet_type)
    682 
    683         packet = packet_type(buff, self.encoding)
--> 684         packet.check_error()
    685         return packet
    686 

D:\Softwares\Anaconda\lib\site-packages\pymysql\protocol.py in check_error(self)
    218             errno = self.read_uint16()
    219             if DEBUG: print("errno =", errno)
--> 220             err.raise_mysql_exception(self._data)
    221 
    222     def dump(self):

D:\Softwares\Anaconda\lib\site-packages\pymysql\err.py in raise_mysql_exception(data)
    107         errval = data[3:].decode('utf-8', 'replace')
    108     errorclass = error_map.get(errno, InternalError)
--> 109     raise errorclass(errno, errval)

InternalError: (1191, "Can't find FULLTEXT index matching the column list")

谁能帮助我,告诉我为什么它没有显示搜索结果,因此给我一个提示?

谢谢!!

【问题讨论】:

    标签: mysql python-3.x pymysql


    【解决方案1】:

    为了使用全文搜索,首先需要在相关列上创建全文索引。

    您可以使用以下语法将全文索引添加到现有表。

    ALTER TABLE table_name  
    ADD FULLTEXT(column_name1, column_name2,…)
    

    【讨论】:

    • 现在它显示了这个错误 - TypeError: 在字符串格式化期间并非所有参数都被转换。感谢您的回复。
    • 问题在于以下代码: for r in res: print(r) 您的列根本不是字符串,但您正试图将它们全部打印出来。您可以尝试打印特定的字符串列。
    • 我通过为两个查询写两次 cursor.execute(query) 来获得输出:ALTER TABLE 和 MATCH。
    • 你不需要以编程方式运行alter table query,你可以在MySQL客户端上运行一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 2010-12-26
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多