【发布时间】:2012-04-10 18:41:53
【问题描述】:
在 Solr 中,跨不同字段查询的最佳方式是什么,其中每个字段上的每个查询都有不同的权重?
我们使用 C# 和 ASP.NET,SolrNet 用于查询 Solr。我们的索引看起来有点像这样:
- document_id
- 标题
- 文本内容
- 标签
- [更多字段...]
然后使用关键字进行查询,其中每个关键字具有不同的权重。因此,例如,“ipad”的权重可能为 40,而“android”的权重可能为 25。
与此相结合,每个字段都有不同的基础权重。例如,关键字比页面标题更有价值,页面标题比文本内容更有价值。
所以,我们最终会得到如下结果:
- 标题^25
- text_content^10
- 标签^50
以及以下关键字:
- ipad^25
- 苹果^22
- 微软^15
- windows^15
- 软件^20
- 电脑^18
因此,每个搜索查询都有不同的权重,每个字段都有不同的权重。结果,我们最终得到如下搜索条件:
- 标题:ipad^50
- 标题:苹果^47
- title:microsoft^40
- [更多标题...]
- text_content:ipad^35
- text_content:apple^32
- text_content:microsoft^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)这些也可以为搜索查询添加很多字符,如果也有更好的方法来处理这个问题,那就太好了。
非常感谢任何帮助或建议。谢谢。
【问题讨论】: