Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.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
Php 搜索查询中的匹配问题_Php_Mysql_Match_Fulltext Index - Fatal编程技术网

Php 搜索查询中的匹配问题

Php 搜索查询中的匹配问题,php,mysql,match,fulltext-index,Php,Mysql,Match,Fulltext Index,我有一个网站谁列出产品的情况 我使用的是全文索引,与搜索匹配 有一个名为itemcode的字段,该字段为varchar类型 比如说,有一个密码是这样的 世贸中心-153-U 当我在文本框WTC-153上输入时,我没有得到任何结果,我猜这是基于连字符和数字的,有什么解决方法或更好的方法吗 如果不修改那么多代码,我现在似乎无法找到解决方案 问题是这样的 SELECT field FROM table WHERE MATCH(itemcode) AGAINST ('WTC-153') 谢谢-算作单词

我有一个网站谁列出产品的情况

我使用的是全文索引,与搜索匹配

有一个名为itemcode的字段,该字段为varchar类型

比如说,有一个密码是这样的

世贸中心-153-U

当我在文本框WTC-153上输入时,我没有得到任何结果,我猜这是基于连字符和数字的,有什么解决方法或更好的方法吗

如果不修改那么多代码,我现在似乎无法找到解决方案

问题是这样的

SELECT field FROM table WHERE MATCH(itemcode) AGAINST ('WTC-153')
谢谢

-算作单词分隔符,所以“WTC-153-U”算作三个单词,“WTC”、“153”和“U”

对于MyISAM,全文搜索的默认字长下限为4个字符,而对于InnoDB,则为3个字符,这些字符可以更改

如果您使用的是InnoDB,您可以通过在文本中搜索“WTC”和“153”来回避这个问题。。显然,这将返回一个结果,即使这些单词不在一起或顺序不正确


否则,您可以使用“%WTC-153%”之类的搜索,但这将无法使用索引。例如“WTC-153%”将能够使用索引,但仅当字段以“WTC-153%”开头时才会返回行。

您的查询是什么样子的?我希望您使用的是where itemcode,比如“WTC-153%”?like对我来说不起作用,因为当它们是混合词时,没有找到匹配项,我使用的是matchagainst@TJ-MySQL全文版的全部目的是避免昂贵的查询。嗨,我使用的是MyISAM,MySQL版本不允许InnoDB使用fullindex,我如何更改长度?我可以使用哪些不太影响当前代码的解决方案,因为它基于一系列动态过滤器和joins@DannyG我将使用“%WTC-153-U%”,它是唯一保证返回正确结果的东西。进一步检查后,在itemcode上有一个全文索引是非常奇怪的。我考虑过这一点,但是如果有一个名为Black Striped keyboard的项目,而用户键入的是Black keyboard呢?你真的应该将itemcode搜索逻辑与项目名称搜索逻辑分开。。但是,LIKE不区分大小写。