【问题标题】:haystack solr search ALL fieldshaystack solr 搜索所有字段
【发布时间】:2011-06-16 05:46:31
【问题描述】:

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

我可以做一个.filter(content='string') 但这只会搜索document=True 中的任何字段

编辑 此外,一些非document=True 字段应用了不同的过滤器/标记器,所以我猜这将无法将它们添加到单个字段中......

【问题讨论】:

    标签: python django solr django-haystack


    【解决方案1】:

    也许您可以使用“use_template”创建第二个字段和显示所有字段的模板。

    我从未尝试过这样做,但这对我来说听起来不错。

    自 OP 评论后编辑:

    那么我最好的选择是使用子类 SearchQueryset 添加一个方法或创建一个函数来循环和 SearchIndex 中的所有字段并执行以下操作:

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

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

    【讨论】:

    • 我已经更新了这个问题。我一直在按照您的建议进行操作,但我需要在字段中应用不同的过滤器/标记器 :( 感谢您的回答,在大多数情况下这会起作用
    • 感谢您的更新。解决方案是对一系列 haystack 相关的类进行子类化,让我更好地控制 solr 的工作方式。虽然我认为这意味着我将无法使用另一个后端......幸运的是 solr 很棒。再次感谢
    【解决方案2】:

    @neolaser:我认为你想要的可以通过使用 DisMax 搜索来实现。它允许搜索多个字段并为每个字段指定提升值。更多详情:

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

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

    【讨论】:

    • 感谢您的回答。我已经给出了正确的答案,因为它是一段时间后给出的“最接近”的答案,但我最终还是使用了 dismax!所以感谢您的回答,我相信这对其他人也有用!
    【解决方案3】:

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

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

    【讨论】:

    • 感谢您的回复。我更新了问题,说某些字段应用了不同的过滤器/标记器,我认为这可能会排除我们的第二个选项。我将如何使用 haystack 中的第一个选项?
    • 如果您使用不同的标记器,您需要在查询中明确命名您的字段。那是问题吗?我可以想象当您需要搜索不可预测数量的动态字段时的情况,但通常如果您的字段集是静态的,只需像上面的示例一样构建一个适当的查询。不要害怕它很长,Solr 没问题。
    猜你喜欢
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多