2

在 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)

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

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

4

1 回答 1

2

我建议将这些默认参数添加到您的请求处理程序配置中solrconfig.xml。他们总是一样的,对吧?

<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 更短。

于 2012-04-11T07:20:16.663 回答