Solr文档必须匹配一个字段

时间:2014-07-30 07:49:05

标签: solr filter facets

我有两个字段

  1. 文本字段..所有重要字段,如类别,产品名称,品牌都会被复制到其中。

  2. 属性字段..所有属性都复制到此字段中。

  3. 我有一个搜索查询,例如“50毫米直径钻头”

    我想在两个字段中搜索此字符串。我假设这将匹配在文本字段中具有钻取的所有产品。

    我希望缩小结果,以防任何与50毫米直径相匹配的属性。

    如果属性字段中没有匹配,我想返回与文本字段匹配的所有文档。

    编辑:我不想要任何与文字字段不匹配的文档。

    我只想要,如果搜索与属性字段匹配,并且找到了文档,我们只返回那些文档。

    如果找不到,我们会返回与文本字段匹配的所有文档

2 个答案:

答案 0 :(得分:0)

“drill”是否匹配取决于字段的处理方式,但可能是肯定的。最简单的方法是不限制“如果不匹配,请执行此操作..”,但要将属性字段中的匹配得分更高。您可以使用qf(如果使用(e)dismax)及其权重来执行此操作,例如attributes^20 text,它会将属性中的任何匹配得分比文本中的匹配多20倍。然后,attributes中包含正确字词的任何搜索匹配文档的评分都会高于text中匹配的文档。

您还可以在q参数中执行类似操作,您可以在其中分别对每个字词进行加权:text:drill OR attributes:drill^20

答案 1 :(得分:0)

这有点棘手,很多事情都取决于你的现场处理要求。

您需要结合使用字段权重,将属性字段排名更高,将edismax排名最低匹配mm

最小匹配允许您配置必须命中查询中的多少个术语才能显示结果。这有助于清除仅在一个字段中触及一个术语的文档。

最后,如果您真的想在这里拥有自己的逻辑,可以在字段前加上+以使其成为必需字段。例如+属性:drill将仅返回属性字段中具有钻取的项目。