如何处理模糊搜索查询中的特殊字符
How to handle special characters in fuzzy search query
所以我的 solr 查询分两部分实现,如果没有找到精确的结果,第一个查询将进行精确搜索,然后转到第二个查询进行模糊搜索。
一切正常,但在这种情况下 --> 用户输入 "burg +"
所以在精确搜索中不会有记录,所以调用第二个查询来做模糊 search.Now 问题是我的模糊查询不理解像 +,-* 这样的特殊字符,它抛出 error.If 我没有通过特殊字符它工作正常。但在现实世界中,用户可以将字符放入他们的搜索中,这将引发错误。
现在我陷入了困境,不知道如何解决这个问题。
这就是我的确切搜索查询的样子
$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 的新手,不知道如何处理这种情况。
我使用的详细信息
Solrphp客户端
php
solr 4.9
好的,所以我看到您正在使用 solrphpclient.You 需要在 service.php 文件中进行更改,以便将这些特殊字符替换为空白或您想要的任何字符。
这将解决您面临的问题
$params=str_replace("%", "", $params);
$params=str_replace("*", "", $params);
$params=str_replace("&", "", $params);
您需要将其放入搜索函数或自定义函数中,我假设您将其用于模糊查询
所以我的 solr 查询分两部分实现,如果没有找到精确的结果,第一个查询将进行精确搜索,然后转到第二个查询进行模糊搜索。 一切正常,但在这种情况下 --> 用户输入 "burg +" 所以在精确搜索中不会有记录,所以调用第二个查询来做模糊 search.Now 问题是我的模糊查询不理解像 +,-* 这样的特殊字符,它抛出 error.If 我没有通过特殊字符它工作正常。但在现实世界中,用户可以将字符放入他们的搜索中,这将引发错误。 现在我陷入了困境,不知道如何解决这个问题。 这就是我的确切搜索查询的样子
$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 的新手,不知道如何处理这种情况。
我使用的详细信息
Solrphp客户端
php
solr 4.9
好的,所以我看到您正在使用 solrphpclient.You 需要在 service.php 文件中进行更改,以便将这些特殊字符替换为空白或您想要的任何字符。 这将解决您面临的问题
$params=str_replace("%", "", $params);
$params=str_replace("*", "", $params);
$params=str_replace("&", "", $params);
您需要将其放入搜索函数或自定义函数中,我假设您将其用于模糊查询