如何在solr中进行布尔OR?

时间:2011-07-08 15:31:52

标签: php drupal solr

我是全新的...

我在apacheolr模块中使用durpal。

我有以下过滤器:

(  tid:19895 OR tid:19937 ) AND  type:poster"
这不会返回任何结果,但如果我有以下内容,则会按预期返回结果
(  tid:19937 ) AND  type:poster"
编辑:这都是过滤器。我需要有一个tids列表,它可以与类型为海报。所以它必须是类型:海报和以下一个tid:19895,19937

3 个答案:

答案 0 :(得分:2)

虽然:

((tid:(19895 OR 19937))AND type:poster)应该工作,无论defaultOperator是OR / AND

将子句添加为单独的过滤器更好,因此添加两个过滤器

tid:(19895 OR 19937)

类型:海报

应过滤掉以AND作为结果的结果,并分别缓存此过滤器的结果,以便使用此过滤器提高新查询的查询性能。

答案 1 :(得分:0)

我认为重要的是要注意SOLR不是数据库。它是一个搜索引擎,因此不会像您可能习惯的数据库查询那样工作。

添加+意味着该字段是必需的

+tid:19895 would mean that TID field is required to equal exactly 19895

*是通配符,因此添加它意味着您的字段将包含值但不一定等于该值。

tid:19895* would mean TID field contains 19895

看起来问题是在同一个过滤器中两次定义字段???

因此,请尝试删除第二个“tid:”

在我的测试中,我这样做了: 我的SOLR查询是:

+type:poster

过滤器是:

tid:19895 OR 19937

这是另一个类似于你的stackoverflow问题,因为你显然有不同于我使用的语法。

using OR and NOT in solr query

答案 2 :(得分:0)

如果默认布尔子句为“或”,则为FYI,然后像这样给出查询 ((tid:(19895 19937))和类型:海报)这个工作正常我测试了