Php 模糊搜索查询中特殊字符的处理

Php 模糊搜索查询中特殊字符的处理,php,search,solr,Php,Search,Solr,所以我的solr查询分两部分实现,第一个查询执行精确搜索,如果没有找到精确的结果,那么它将转到第二个查询执行模糊搜索。 一切正常,但在-->用户输入“burg+”等情况下 因此,在精确搜索中不会出现任何记录,因此调用第二个查询来进行模糊搜索。现在出现的问题是,我的模糊查询不理解特殊字符,如+、-*,它会抛出错误。如果我不传递特殊字符,它就可以正常工作。但在现实世界中,用户可以在搜索时输入字符,这将抛出一个错误。 现在我陷入了困境,不知道如何解决这个问题。 这就是我的精确搜索查询的样子 $quer

所以我的solr查询分两部分实现,第一个查询执行精确搜索,如果没有找到精确的结果,那么它将转到第二个查询执行模糊搜索。 一切正常,但在-->用户输入“burg+”等情况下 因此,在精确搜索中不会出现任何记录,因此调用第二个查询来进行模糊搜索。现在出现的问题是,我的模糊查询不理解特殊字符,如+、-*,它会抛出错误。如果我不传递特殊字符,它就可以正常工作。但在现实世界中,用户可以在搜索时输入字符,这将抛出一个错误。 现在我陷入了困境,不知道如何解决这个问题。 这就是我的精确搜索查询的样子

$query1="(business_name:$data*^100 OR city_name:$data*^1 OR   
locality_name:$data*^6 OR business_search_tag_name:$data*^8 OR 
type_name:$data*^7) AND (business_active_flag:1) AND 
(business_visible_flag:1) AND (delete_status_businessmasters:0)";
$query2='(_query_:%20"{!complexphrase%20qf=business_name^100+type_name^0.4+locality_name^6%27}%20'.$url_new.')AND(business_active_flag:1)AND(business_point:[1.5 TO 2.0])&q.op=AND&wt=json&indent=true';
这就是我的模糊查询的样子

$query1="(business_name:$data*^100 OR city_name:$data*^1 OR   
locality_name:$data*^6 OR business_search_tag_name:$data*^8 OR 
type_name:$data*^7) AND (business_active_flag:1) AND 
(business_visible_flag:1) AND (delete_status_businessmasters:0)";
$query2='(_query_:%20"{!complexphrase%20qf=business_name^100+type_name^0.4+locality_name^6%27}%20'.$url_new.')AND(business_active_flag:1)AND(business_point:[1.5 TO 2.0])&q.op=AND&wt=json&indent=true';
这就是我犯的错误

 Cannot parse ' must~1 *~N': '*' or '?' not allowed as first character in WildcardQuery
我是新来solr的,不知道如何处理这种情况

iam使用的详细信息

索普客户

php


solr 4.9

好的,我看到您正在使用SolrpClient。您需要在service.php文件中进行更改,以便将这些特殊字符替换为空白或您想要的任何字符。 这将解决您面临的问题

$params=str_replace("%", "", $params);
$params=str_replace("*", "", $params);
$params=str_replace("&", "", $params);
您需要将其放入搜索函数或自定义函数中,我假设您正在使用该函数进行模糊查询