Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何改进我的自然语言搜索查询_Mysql - Fatal编程技术网

Mysql 如何改进我的自然语言搜索查询

Mysql 如何改进我的自然语言搜索查询,mysql,Mysql,我有一个我正在尝试构建的查询,我想进行一些自然语言搜索。我不确定在mysql中实现这一点的最佳方法。我相信mysql有一些很酷的自然语言,我可以使用 我有两张表,我已经在下面展示了 1. transaction_category... +--------------------+--------------------+-------------------+----------+ | tran_category_code | tran_category_desc | tran_category

我有一个我正在尝试构建的查询,我想进行一些自然语言搜索。我不确定在mysql中实现这一点的最佳方法。我相信mysql有一些很酷的自然语言,我可以使用

我有两张表,我已经在下面展示了

1. transaction_category...
+--------------------+--------------------+-------------------+----------+
| tran_category_code | tran_category_desc | tran_category_seq | btn_type |
+--------------------+--------------------+-------------------+----------+
| CarParking         | Car Parking        |                 2 | default  |
| Electricity        | Electricity        |                 1 | default  |
| Groceries          | Groceries          |                 4 | default  |
| HealthInsurance    | Health Insurance   |                 5 | default  |
| Other              | Other              |                 7 | default  |
| Petrol             | Petrol             |                 3 | default  |
| Phone              | Phone              |                 6 | default  |
+--------------------+--------------------+-------------------+----------+


2. transaction_category_keyword...
+---------------------------------+------------------------------+--------------------+
| transaction_category_keyword_id | transaction_category_keyword | tran_category_code |
+---------------------------------+------------------------------+--------------------+
|                               6 | Telstra                      | Phone              |
|                               7 | Park                         | CarParking         |
|                               8 | Coles                        | Groceries          |
|                               9 | Bp Connect                   | Petrol             |
|                              10 | Bupa                         | HealthInsurance    |
+---------------------------------+------------------------------+--------------------+
下面是我的查询,它返回了我想要的结果,但我想知道是否有人可以给我一些建议,看看是否可以使用mysql的自然语言函数来改进这一点。这将有助于我,因为搜索现在非常简单,但我将很快在它的基础上建设很多

SELECT  
   tck.transaction_category_keyword_id,
   tck.transaction_category_keyword,
   tck.tran_category_code
FROM transaction_category tc, transaction_category_keyword tck
WHERE tc.tran_category_code = tck.tran_category_code
AND 'Coles Menai Syd Au' like '%' ||UPPER(tck.transaction_category_keyword) || '%'

+---------------------------------+------------------------------+--------------------+
| transaction_category_keyword_id | transaction_category_keyword | tran_category_code |
+---------------------------------+------------------------------+--------------------+
|                               7 | Park                         | CarParking         |
|                               8 | Coles                        | Groceries          |
|                              10 | Bupa                         | HealthInsurance    |
|                               9 | Bp Connect                   | Petrol             |
|                               6 | Telstra                      | Phone              |
+---------------------------------+------------------------------+--------------------+

一般来说,如果搜索字段的开头和结尾都有通配符,那么对于任何非平凡的表大小,搜索速度都会相当慢,因为必须从每个索引开始搜索字段

在搜索大量单词(及其在索引中的相对频率)时,您肯定会受益于全文搜索和匹配,而不是在其他字段中搜索特定字符串。我想你已经读过了。你需要了解许多微妙之处,如停止词、布尔搜索、查询扩展等。这些页面上的评论非常好,因为它们积累了以前去过那里并进行过实验的人的知识

关于MySQL(以及许多其他全文搜索)是如何在内部工作的,也值得一读,请参见,它基本上是根据一个词在所有文档中的稀有程度和在特定文档中出现的次数来对搜索进行排序的

我不能给你更多的重点示例,或者性能指标,因为你的问题是全文搜索是否会优于类似双通配符的搜索,答案几乎是无条件的“是”


注意事项:考虑到引擎之间的差异,总是值得一提的,但在MySQL 5.6版之前,全文搜索仅针对MyISAM的单词,但之后也使用InnoDB。

实际上,此查询不会返回我想要的内容。我错了。我只想要事务\类别\关键字\ id=8哦,如果您的需求发生变化,您将知道在哪里查找。