2011-06-16 73 views
1

我有一个solr搜索引擎设置了多个字段,我希望能够搜索所有字段。haystack solr搜索全部字段

我可以做一个.filter(content='string')但这只是搜索任何领域都在document=True

编辑 此外,一些非document=True领域有不同的过滤器/应用,以便即时猜测这会不会增加工作tokenisers他们到一个单一的领域...

回答

1

@neolaser:我想你可以通过使用DisMax搜索来实现。它允许通过多个字段进行搜索并为每个字段指定增强值。有关详细信息:

http://wiki.apache.org/solr/SolrRelevancyFAQ

http://wiki.apache.org/solr/DisMaxQParserPlugin

+0

谢谢你的回答,我已经给出了正确的答案,因为它是“最近的“,但是我最终使用了dismax!所以谢谢你的回答,我确定这对其他人也有用! – neolaser 2011-09-13 23:20:27

1

您可以搜索所有领域购买,包括他们全部到您的filtering query参数或命名它们在查询字符串(例如,如果您需要搜索“(关键字”搜索“((( field_1:keyword)OR(field_2:keyword)OR(field_3:keyword))“instea d)。

但是,通常最好有一个专用字段连接您需要搜索和搜索该单个字段的所有其他字段。您可以在架构中设置copyfield,以便在文档编入索引时自动生成该内容。

+0

感谢您的答复。我更新了这个问题,说一些领域有不同的过滤器/标记器应用,我认为可能会排除我们的第二种选择。我将如何使用干草堆中的第一个选项? – neolaser 2011-06-16 23:09:59

+0

如果您使用不同的标记器,则需要在查询中明确指定您的字段。那是问题吗?我可以想象当您需要搜索不可预知数量的动态字段时的情况,但通常情况下,如果您的字段设置为静态,则只需像上面的示例一样构建适当的查询。不要怕它太久,Solr就可以。 – Yuriy 2011-06-17 08:42:29

1

也许你可以用'use_template'和一个显示所有字段的模板创建第二个字段。

我从来没有试过这样做,但这听起来是一个很好的方法来做到这一点。因为OP评论

编辑:

然后我最好的选择是eaither sublass SearchQueryset添加一个方法或创建一个函数,将循环在你的SearchIndex各个领域,并做一些事情,如:

qs = SearchQuerySet().filter(content=query) 
for field in fieldlist: 
    qs = qs.filter_or(**{'field':query}) 

我不知道这是否可行,但值得一试。

+0

我已经更新了这个问题。我一直在做你的建议,但我需要的领域有不同的过滤器/ tokenisers申请:(谢谢你的答案,在大多数情况下,这将工作 – neolaser 2011-06-16 23:11:02

+0

感谢您的更新。解决方案是继承一系列干草堆相关的类给虽然我认为这意味着我不能够使用另一个后端......幸运的是,solr非常棒,再次感谢 – neolaser 2011-06-21 05:39:09