Php PartialMatchFilter问题

Php PartialMatchFilter问题,php,silverstripe,Php,Silverstripe,网站上有一个搜索页面,因此网站访问者可以按城市或/或姓名搜索内容。因此,城市是一个下拉过滤器,名称搜索是一个PartialMatchFilter文本字段 PartialMatchFilter可以很好地搜索名字的一部分,例如Tim或Smith,然后Tim Glen Smith出现。我的问题是,当你拦截Tim Smith时,它说没有匹配,因为我在中间错过了格林。 当人们不知道此人的中间名时,PartialMatchFilter是否适用于这种情况?最好的方法是什么?谢谢 下面是代码 $filters

网站上有一个搜索页面,因此网站访问者可以按城市或/或姓名搜索内容。因此,城市是一个下拉过滤器,名称搜索是一个PartialMatchFilter文本字段

PartialMatchFilter可以很好地搜索名字的一部分,例如Tim或Smith,然后Tim Glen Smith出现。我的问题是,当你拦截Tim Smith时,它说没有匹配,因为我在中间错过了格林。 当人们不知道此人的中间名时,PartialMatchFilter是否适用于这种情况?最好的方法是什么?谢谢

下面是代码

$filters = array (
'YourName' => new PartialMatchFilter("YourName"),
'YourCity' => new ExactMatchMultiFilter("YourCity"),
}

我认为您需要将搜索条件中的空格替换为百分号

例如,“蒂姆·史密斯”变成了“蒂姆·史密斯”


然后,部分匹配筛选器应该能够找到正确的记录。

PartialMatchFilter相当于

WHERE FieldName LIKE '%{$your_input}%'
所以只能匹配字段中某个地方的精确字符串


为了能够在字段中搜索多个单词,最好使用。

Hi-PB,如果你把“Tim%Smith”放在上面,你是对的。Tim Glem Smith确实出现了,但是访问者来到我的网站寻找Tim,却不知道在名称之间加上%符号。有没有办法将其写入php代码,以便随机访问者在Tim Glen中键入,它会自动将其更改为Tim%Smith,以使此部分匹配过滤器工作?谢谢。就我个人而言,我的方法是使用regexp和preg_replace将任何连续的空格替换为单个%。然而,由于我对regexp不太熟悉,我需要花很长时间才能找到最合适的表达式。我相信还有其他成员可以提供帮助。在回答这个问题“”时,可以使用类似以下内容:`str=preg_replace(“/\s+/g”、'%'、$searchCriteria)`使该代码段
$searchCriteria=preg_替换(“/\s+/g”、“%”、$searchCriteria)谢谢PB,我一直在尝试使用您的代码,但到目前为止没有成功,我在上面添加了更多的代码,您能否为我指出如何在我的代码中实现您的建议的正确方向?谢谢。请尝试将
'Value'=>$data['YourName']
替换为
'Value'=>preg\u replace(“/\s+/”、“%”、$data['YourName]”)
您好,谢谢您的回复。我想通过访问者知道的名字的任何部分来搜索这个名字,例如搜索Tim、Smith、Tim Smith,甚至只搜索T、Tim Glen Smith会出现的名字。FulltextFilter可以工作吗?不确定用FulltextFilter替换PartialMatchFilter是否可行?谢谢。嗨,伊洛格,谢谢你的回复。我试图用$filters=array('YourName'=>new PartialMatchFilter(“YourName”),…}替换$filters=array('YourName'=>new FulltextFilter(“YourName”),…},但它给我带来了一个错误-[用户错误]无法运行查询:选择不同的“配置文件”…找不到与列列表匹配的全文索引。我做错了什么?我使用的是SS2.4.5。如果有任何建议,将不胜感激,谢谢。请查看我原始答案中指向FulltextFilter的链接-它在顶部解释了如何添加索引。感谢iLogue,不确定它以前为什么不起作用,可能是缓存问题,你的建议现在正在发挥作用。谢谢。