在 Solr 中,在每个字段上的每个查询具有不同权重的情况下,跨不同字段进行查询的最佳方式是什么?
我们使用 C# 和 ASP.NET,使用SolrNet来查询 Solr。我们的索引看起来有点像这样:
- 文档 ID
- 标题
- 文本内容
- 标签
- [更多领域...]
然后使用关键字进行查询,其中每个关键字具有不同的权重。因此,例如,“ipad”的权重可能为 40,而“android”的权重可能为 25。
与此相结合,每个字段都有不同的基础权重。例如,关键字比页面标题更有价值,页面标题比文本内容更有价值。
因此,我们最终得到如下内容:
- 标题^25
- 文本内容^10
- 标签^50
以及以下关键字:
- ipad^25
- 苹果^22
- 微软^15
- 窗户^15
- 软件^20
- 电脑^18
因此,每个搜索查询都有不同的权重,每个字段都有不同的权重。结果,我们最终得到如下搜索条件:
- 标题:ipad^50
- 标题:苹果^47
- 标题:微软^40
- [更多标题...]
- 文本内容:ipad^35
- 文本内容:苹果^32
- 文本内容:微软^25
- [更多...]
这转化为一个非常非常长的搜索查询,超出了允许的限制。这似乎也是一种非常低效的做事方式,我想知道是否有更好的方法来实现这一点。
实际上,我们有一个具有不同权重的关键字列表,以及 Solr 中也具有不同权重的字段列表,其想法是查询索引以检索最相关的文档。
尽管它可能超出了这个问题的范围,但使这个问题进一步复杂化的是,查询还包括过滤器以过滤掉文档。这是使用以下类型的查询完成的:
&fq=(-document_id:4f845eb321c90b0aec5ee0eb)&fq=(-document_id:4f845cd421c90b0aec5ee041)&fq=(-document_id:4f845cea21c90b0aec5ee049)&fq=(-document_id:4f845cf821c90b0aec5ee04d)&fq=(-document_id:4f845d0e21c90b0aec5ee056)&fq=(-document_id:4f845d3521c90b0aec5ee064)&fq= (-document_id:4f845d3921c90b0aec5ee065)&fq=(-document_id:4f845d4921c90b0aec5ee06b)&fq=(-document_id:4f845d7521c90b0aec5ee07b)&fq=(-document_id:4f845d9021c90b0aec5ee084)&fq=(-document_id:4f845dac21c90b0aec5ee08e)&fq=(-document_id:4f845dbc21c90b0aec5ee093)
这些也可以为搜索查询添加很多字符,如果还有更好的方法来处理这个问题,那就太好了。
非常感谢任何帮助或建议。谢谢。