在Solr中使用不同的增强查询多个字段

时间:2012-04-10 18:41:53

标签: solr solrnet

在Solr中,在每个字段上的每个查询具有不同权重的不同字段中查询的最佳方式是什么?

我们正在使用C#和ASP.NET,SolrNet用于查询Solr。我们的索引看起来有点像这样:

  • DOCUMENT_ID
  • 标题
  • TEXT_CONTENT
  • 标记
  • [更多领域......]

然后使用关键字查询,其中每个关键字具有不同的权重。因此,例如,“ipad”的权重可能为40,但“android”的权重可能为25。

与此相结合,每个字段具有不同的基重。例如,关键字比页面标题更有价值,它们比文本内容更有价值。

因此,我们最终会得到以下内容:

  • 标题^ 25
  • TEXT_CONTENT ^ 10
  • 标记^ 50

以下关键字:

  • 的ipad ^ 25
  • 苹果^ 22
  • 微软^ 15
  • 窗^ 15
  • 软件^ 20
  • 计算机^ 18

因此,每个搜索查询都有不同的权重,每个字段的权重不同。因此,我们最终会得到如下搜索条件:

  • 标题:ipad公司^ 50
  • 标题:苹果^ 47
  • 标题:微软^ 40
  • [更多标题......]
  • TEXT_CONTENT:ipad公司^ 35
  • TEXT_CONTENT:苹果^ 32
  • TEXT_CONTENT:微软^ 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)

这些也可以在搜索查询中添加很多字符,如果还有更好的方法来处理这个问题会很好。

非常感谢任何帮助或建议。感谢。

1 个答案:

答案 0 :(得分:2)

我建议将这些默认参数添加到solrconfig.xml中的requesthandler配置中。它们总是一样的,对吧?

<requestHandler name="standard" class="solr.SearchHandler" default="true">
    <lst name="defaults">
        <str name="defType">edismax</str>
        <str name="qf">title^25 text_content^10 tags^50</str>
    </lst>  
</requestHandler>

您应该能够添加静态过滤器等等,这样您就不必指定这些值,除非您想要执行与默认值不同的操作,最后使用更短的URL。