我有两个字段
文本字段..所有重要字段,如类别,产品名称,品牌都会被复制到其中。
属性字段..所有属性都复制到此字段中。
我有一个搜索查询,例如“50毫米直径钻头”
我想在两个字段中搜索此字符串。我假设这将匹配在文本字段中具有钻取的所有产品。
我希望缩小结果,以防任何与50毫米直径相匹配的属性。
如果属性字段中没有匹配,我想返回与文本字段匹配的所有文档。
编辑:我不想要任何与文字字段不匹配的文档。
我只想要,如果搜索与属性字段匹配,并且找到了文档,我们只返回那些文档。
如果找不到,我们会返回与文本字段匹配的所有文档
答案 0 :(得分:0)
“drill”是否匹配取决于字段的处理方式,但可能是肯定的。最简单的方法是不限制“如果不匹配,请执行此操作..”,但要将属性字段中的匹配得分更高。您可以使用qf
(如果使用(e)dismax)及其权重来执行此操作,例如attributes^20 text
,它会将属性中的任何匹配得分比文本中的匹配多20倍。然后,attributes
中包含正确字词的任何搜索匹配文档的评分都会高于text
中匹配的文档。
您还可以在q
参数中执行类似操作,您可以在其中分别对每个字词进行加权:text:drill OR attributes:drill^20
。
答案 1 :(得分:0)
这有点棘手,很多事情都取决于你的现场处理要求。
您需要结合使用字段权重,将属性字段排名更高,将edismax排名最低匹配mm
最小匹配允许您配置必须命中查询中的多少个术语才能显示结果。这有助于清除仅在一个字段中触及一个术语的文档。
最后,如果您真的想在这里拥有自己的逻辑,可以在字段前加上+以使其成为必需字段。例如+属性:drill将仅返回属性字段中具有钻取的项目。