首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SphinxQL和SPH_MATCH_ANY

SphinxQL和SPH_MATCH_ANY
EN

Stack Overflow用户
提问于 2012-10-03 20:45:36
回答 2查看 1.8K关注 0票数 0

我正在使用SphinxQL查询SphinxQL搜索引擎。我想模拟在php API中实现的SPH_MATCH_ANY,如下所示:

代码语言:javascript
复制
$cl->SetMatchMode(SPH_MATCH_ANY);
$cl->Query("test query", "index");

=>搜索与“测试”或“查询”匹配的文档

因此,我编写了一个函数(php),将空格和其他特殊字符替换为竖线(|),以便在SphinxQL中使用它:

代码语言:javascript
复制
function formatQuery($str) {
   return trim(preg_replace('/[^-_\'a-z0-9]+/', '|', $str), ' |');
}

$str = "test query";
$sql = "SELECT * FROM index WHERE MATCH('" . addslashes(formatQuery($str)) . "')";

测试SELECT * FROM index WHERE MATCH(‘=> |query’);

问题是,对于某些字符,如-(减号),它可能会中断查询,例如:

代码语言:javascript
复制
$str = "i-phone is great";
$sql = "SELECT * FROM index WHERE MATCH('" . addslashes(formatQuery($str)) . "')";

=> SELECT * FROM index WHERE MATCH('i-phone|is|great')

=>好的

代码语言:javascript
复制
$str = "i - phone is great";
$sql = "SELECT * FROM index WHERE MATCH('" . addslashes(formatQuery($str)) . "')";

phone SELECT * FROM index WHERE MATCH(‘I|-| => |is|great’)

由于"|-|“,=>查询中断

您是否知道使SphinxQL查询在SPH_MATCH_ANY模式下工作的更好方法?或者一个更好的regexp让它在所有情况下都能工作?

我知道我可以使用更具限制性的regexp,如下所示:

代码语言:javascript
复制
preg_replace('/[^a-z0-9]+/', '|', $str)

但它会拆分字符串,比如'i|phone| is |great‘中的’i-phone is great‘,我不希望这样……

谢谢你,Nico

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-03 21:32:54

一种方法可能是使用quorom

代码语言:javascript
复制
$sql = "SELECT * FROM index WHERE MATCH('\"" . addslashes($str) . "\"/1')";

你需要将-添加到你的charset_table tho中,这样它才能成为单词的一部分。

票数 0
EN

Stack Overflow用户

发布于 2012-10-03 21:42:42

另一个选项是

代码语言:javascript
复制
$query = preg_replace('/(\w+?)[-\'](\w+?)/','$1~$2',$query);
$query = preg_replace('/[^\w\~]+/','|',$query);
$query = preg_replace('/(\w+~\w[\w~]*)/e','"\"".str_replace("~"," ","$1")."\""',$query);

把它变成一个短语。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12708787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档