我正在使用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来使事情过于复杂?
答案 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
..会在Summer
和series
字段中搜索description
,但会为series
字段中的匹配提供20倍的权重。这是一种自然地增强与文档中更精确数据匹配的文档的好方法。如果您还包含brand
字段,则可以让您的用户搜索"定位夏季"和类似的查询。