hightman / xunsearch

免费开源的中文搜索引擎,采用 C/C++ 编写 (基于 xapian 和 scws),提供 PHP 的开发接口和丰富文档
http://www.xunsearch.com
Other
1.65k stars 391 forks source link

xunsearch是否支持同一个字段的两次range搜索 #28

Closed shoutrain closed 8 years ago

shoutrain commented 8 years ago

xunsearch是否支持同一个字段的两次range搜索?比如,有个字段是age,我能否这样搜索:10 < age < 15 and 20 < age < 25?

hightman commented 8 years ago

可以吧。

Best Regards

hightman/海鳗


微信/微博:hightman Github:https://github.com/hightman

在 2016年1月13日,下午3:46,Rafael Gu notifications@github.com 写道:

xunsearch是否支持同一个字段的两次range搜索?比如,有个字段是age,我能否这样搜索:10 < age < 15 and 20 < age < 25?

— Reply to this email directly or view it on GitHub https://github.com/hightman/xunsearch/issues/28.

shoutrain commented 8 years ago

@hightman 问过国外的论坛,在Xapian上是可以直接支持age:15..25 OR age:35..45这种搜索语句的。但是我用XunSearch不可以,我是在增加一些索引后,在demo上测试的,如下:

util/Quest.php demo "chrono:1314336167..1314337169 OR chrono:1314341167..1314343169"

上面这条语句,OR前面或后面都可以单独查询出结果,但是一起就没有结果了。

hightman commented 8 years ago

你可以用 XSSearch:addRange 啊,放在 query 里解析似乎 不会成功。

Best Regards

hightman/海鳗


微信/微博:hightman Github:https://github.com/hightman

在 2016年1月19日,上午10:25,Rafael Gu notifications@github.com 写道:

@hightman https://github.com/hightman 问过国外的论坛,在Xapian上是可以直接支持age:15..25 OR age:35..45这种搜索语句的。但是我用XunSearch不可以,我是在增加一些索引后,在demo上测试的,如下: util/Quest.php demo "chrono:1314336167..1314337169 OR chrono:1314341167..1314343169" 上面这条语句,OR前面或后面都可以单独查询出结果,但是一起就没有结果了。

— Reply to this email directly or view it on GitHub https://github.com/hightman/xunsearch/issues/28#issuecomment-172712233.

shoutrain commented 8 years ago

@hightman 但是addRange两次,是AND关系,或者有地方设置默认的关系?

require '/usr/local/xunsearch/sdk/php/lib/XS.php';
$xs = new XS('demo');
$search = $xs->search;

$search->setQuery('');
$search->addRange('chrono', 1314336167, 1314337169);
$search->addRange('chrono', 1314341167, 1314343169);
$docs = $search->search();

foreach($docs as $doc) {
    echo $doc->pid . ' ';
    echo $doc->subject . ' ';
    echo $doc->message . ' ';
    echo $doc->chrono . '<br/>';
}
hightman commented 8 years ago

确实不行,add range 固定为 op_filter 关系 (即AND) parse_query 印象中是不支持2次的。

Best Regards

hightman/海鳗


微信/微博:hightman Github:https://github.com/hightman

在 2016年1月19日,下午2:39,Rafael Gu notifications@github.com 写道:

@hightman https://github.com/hightman 虽然没试过,但是addRange两次,是OR关系还是AND关系呢?想到这个就觉得addRange是不是有问题?或者有地方设置默认的关系?

— Reply to this email directly or view it on GitHub https://github.com/hightman/xunsearch/issues/28#issuecomment-172755602.

shoutrain commented 8 years ago

@hightman 好的,谢谢,那我研究一下Xapian和其PHP接口,您觉得有可能实现我想要的功能吗?如果有可能我们可以放到XunSearch中。

hightman commented 8 years ago

自己构建 Xapian::Query 肯定可以啊,只是xs这要相互通讯有点麻烦。xs每次add query都是在基础query上,而不能分离它们。

比如:当前是 q1,此时添加为 q1 and q2,再以or 添加 q3 就变成 (q1 AND q2) OR q3 而无法做到 q1 AND (q2 OR q3)

Best Regards

hightman/海鳗


微信/微博:hightman Github:https://github.com/hightman

在 2016年1月19日,下午4:55,Rafael Gu notifications@github.com 写道:

@hightman https://github.com/hightman 好的,谢谢,那我研究一下Xapian和其PHP接口,您觉得有可能实现我想要的功能吗?如果有可能我们可以放到XunSearch中。

— Reply to this email directly or view it on GitHub https://github.com/hightman/xunsearch/issues/28#issuecomment-172779543.

shoutrain commented 8 years ago

@hightman 好的,我来尝试一下,我给您的邮箱发了我的微信,希望微信能让沟通效率高一点。我现在正在CentOS 7上装Xapian.