Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.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_Full Text Search - Fatal编程技术网

Php 全文搜索不够,需要解决方法,有什么想法吗?

Php 全文搜索不够,需要解决方法,有什么想法吗?,php,mysql,full-text-search,Php,Mysql,Full Text Search,我目前不能使用全文索引来搜索整个单词,因为我的服务器不允许搜索字符串中少于4个字符 我需要你们的解决办法 我想能够进入'宝马330',然后从mysql的结果与整个比赛,如'宝马330' 我应该考虑第三方搜索引擎吗? 如何在PHP中实现这一点 谢谢你可以用类似的东西。它是用PHP编写的,所以你不需要安装任何东西。你可以使用类似的东西。它是用PHP编写的,所以您不需要安装任何东西。那么,如果您这样编写SQL会怎么样: SELECT * FROM table WHERE text_column LIK

我目前不能使用全文索引来搜索整个单词,因为我的服务器不允许搜索字符串中少于4个字符

我需要你们的解决办法

我想能够进入'宝马330',然后从mysql的结果与整个比赛,如'宝马330'

我应该考虑第三方搜索引擎吗?

如何在PHP中实现这一点


谢谢

你可以用类似的东西。它是用PHP编写的,所以你不需要安装任何东西。

你可以使用类似的东西。它是用PHP编写的,所以您不需要安装任何东西。

那么,如果您这样编写SQL会怎么样:

SELECT * FROM table WHERE text_column LIKE '%bmw 330%' 

那么,如果您这样编写SQL怎么办:

SELECT * FROM table WHERE text_column LIKE '%bmw 330%' 

您说的是“我的服务器”,所以我想您可以直接访问它的配置:

您可以在MySQL中更改全文搜索所需的最小字符数,只需更改以下行(在my.cnf中)即可满足您的需要:

[mysqld]
ft_min_word_len=3
最美好的祝愿,
Fabian

您说的是“我的服务器”,所以我想您可以直接访问它的配置:

您可以在MySQL中更改全文搜索所需的最小字符数,只需更改以下行(在my.cnf中)即可满足您的需要:

[mysqld]
ft_min_word_len=3
最美好的祝愿,

Fabian

从列为“%bmw 330%”的表中选择*?

从列为“%bmw 330%”的表中选择*?

如果要精确匹配,则需要

SELECT * FROM table WHERE text_column = 'bmw 330'

.

如果要精确匹配,则需要

SELECT * FROM table WHERE text_column = 'bmw 330'
.

怎么样

SELECT * FROM table WHERE text_column LIKE '% bmw 330 %'
(注意百分比前后的空格。)

?

一些限制:它会找到完整的单词,但找不到

bmw 330(mint condition)
SPECIAL OFFER!!!!!bmw 330
怎么样

SELECT * FROM table WHERE text_column LIKE '% bmw 330 %'
(注意百分比前后的空格。)

?

一些限制:它会找到完整的单词,但找不到

bmw 330(mint condition)
SPECIAL OFFER!!!!!bmw 330

好的,你现在有很多建议。最好的方法当然是使用像Lucene这样的专业搜索引擎

如果您不能使用Lucene之类的工具,我有一个大规模黑客解决方案的想法

  • 在表中创建第二个文本字段
  • 每当更新文本字段时,将其副本写入第二个文本字段。使用正则表达式查找长度小于4个字符的单词,并在每次出现时添加预定义字符串:
    bmw
    =>
    bmwABCDEF
  • 对于每个传入的搜索查询,使用相同的正则表达式将字符串添加到每个小于4个字符的单词中
    bmw 300
    将变为
    bmwABCDEF 300ABCDEF
    并相应匹配

它非常粗糙,需要彻底检查可能的副作用,但可能比没有更好

好吧,你现在有很多建议。最好的方法当然是使用像Lucene这样的专业搜索引擎

如果您不能使用Lucene之类的工具,我有一个大规模黑客解决方案的想法

  • 在表中创建第二个文本字段
  • 每当更新文本字段时,将其副本写入第二个文本字段。使用正则表达式查找长度小于4个字符的单词,并在每次出现时添加预定义字符串:
    bmw
    =>
    bmwABCDEF
  • 对于每个传入的搜索查询,使用相同的正则表达式将字符串添加到每个小于4个字符的单词中
    bmw 300
    将变为
    bmwABCDEF 300ABCDEF
    并相应匹配

它非常粗糙,需要彻底检查可能的副作用,但可能比没有更好

我试过了,没用,是吗?因为当我尝试时,它返回“BMW330”,即使我写了“bm”…哦。。。那你不想,你想。。。我的下一个答案。我试过了,它不起作用,是吗?因为当我尝试时,它返回“BMW330”,即使我写了“bm”…哦。。。那你不想,你想。。。我的下一个答案是。不,我没有直接的访问权限。。。我是说我的网络主机公司。。。对不起,我不能直接进入。。。我是说我的网络主机公司。。。对不起,这是真的吗?即使文本_列是“BMW330处于薄荷状态”?好的,它不是。你可能需要更多的过滤代码,或者按照Jan的建议使用Lucene或其他东西。即使文本栏是“BMW330处于薄荷状态”,这是真的吗?好的,不是。您可能需要更多的过滤代码,或者按照Jan的建议使用Lucene或其他什么。。。但这是一种非常骇人听闻的方法。。。但是非常黑的indeedLucene或Sphinx都是很好的搜索解决方案,可以很容易地与PHPinded集成!但是问题是他可能无法安装Sphinx,这就是我不推荐它的原因。Lucene或Sphinx都是很好的搜索解决方案,可以轻松地与phpinded集成!然而问题是,他可能无法安装斯芬克斯,这就是为什么我不推荐它。