【问题标题】:Solr - Nested Edismax QuerySolr - 嵌套 Edismax 查询
【发布时间】:2018-04-12 21:45:12
【问题描述】:

我正在使用 Solr(pySolr)在我的数据库中搜索产品,返回产品、构面和 facet.pivots:

result = solr.search(query_s, **{
    'rows': '24',
    'sort': formatted_sort,
    'facet': 'on',
    'facet.limit': '-1',
    'facet.mincount': '1',
    'facet.field': ['gender', 'material'],
    'facet.pivot': 'brand,series',
    'fq': '-in_stock:(0 OR 99 OR 100 OR 101)'
    })

query_s 选择特定字段,例如:brand:Target AND gender:Men's

我想将上述查询与 DisMax 查询结合起来,这将允许我将上述查询与指定字段的全文搜索结合起来。我找到了一个article,它演示了嵌套查询。我试图实现这样的东西:

q: "gender:* AND _query_:"{!edismax qf=brand series}Summer""

由于某种原因,“Target”将返回 Target 品牌衬衫的结果,但仅限于正确大写。 'Summer' 是一系列 Target,不会返回任何结果。为什么我没有看到按相关性排序的文档列表?

完全使用 Dismax 是否让事情变得过于复杂?

【问题讨论】:

    标签: solr lucene


    【解决方案1】:

    dismax 解析器有助于理解更“自然”的查询,即用户习惯于输入他们正在寻找的内容的查询,以及大多数搜索引擎的工作方式。

    在您的情况下,听起来brand:Target AND gender:Men's 是应该显示文档的过滤器,而查询是用户键入的部分。通常您会希望在fq 中使用过滤器,因为它们不会影响分数(即它们是与字段值匹配的精确值),在q 中使用查询。

    我假设Summer 是用户在您的搜索框中输入的内容,这将为您提供:

    q=Summer&defType=edismax&qf=series
    

    但这假设 series 字段被定义为一个附加了分析器的文本字段,因此值被小写并适当地拆分。

    如果您还想搜索description 字段,您可以这样做:

    q=Summer&defType=edismax&qf=series^20 description
    

    .. 这将在 seriesdescription 字段中搜索 Summer,但在 series 字段中给予 20 倍的权重。这是一种自然提升与文档中更精确数据匹配的文档的好方法。如果您还包括 brand 字段,您就可以让您的用户搜索“目标夏季”和类似的查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 2013-09-06
      • 2012-12-24
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多