Solr - 嵌套Edismax查询

时间:2018-04-12 21:45:13

标签: solr lucene

我正在使用Solr(使用pySolr)搜索我的数据库中的产品,返回产品,facet和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品牌衬衫的结果,但只能使用正确的大写字母。 '夏季'这是一系列目标,不会返回任何结果。为什么我没有看到按相关性排序的文档列表?

我是否完全使用Dismax来使事情过于复杂?

1 个答案:

答案 0 :(得分: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

..会在Summerseries字段中搜索description,但会为series字段中的匹配提供20倍的权重。这是一种自然地增强与文档中更精确数据匹配的文档的好方法。如果您还包含brand字段,则可以让您的用户搜索"定位夏季"和类似的查询。