【问题标题】:SOLR Scoring : Can I Extract Hit Count Value from Solr?SOLR 评分:我可以从 Solr 中提取命中计数值吗?
【发布时间】:2011-09-24 01:10:17
【问题描述】:

我对 Solr 的用途是生成一个主要的搜索系统:我们基本上以小批量的方式提供大量文档并在其上搜索预先指定的查询。扫描这些文档中的每一个以查找此特定查询,如果找到,我们需要将文件索引 id、路径和该字符串在该文档中的命中计数存储在数据库中。我已经在网上搜索了从 solr 中提取每个文档的命中计数值的方法,但到目前为止我所了解的是 Solr 根据命中计数和各种其他因素自动对其结果进行排序,您可以使用这些因素进行编辑boosts 和函数查询参数。

  1. 是否有从 Solr 中提取命中计数的既定方法?

  2. 如果不是,是否可以更改 Solr 的评分公式,使其仅考虑命中数,然后要求 Solr 返回分数(在这种情况下基本上是命中数)

(很抱歉,我的问题有点令人困惑。我只想从 Solr 返回每个文档的命中计数,以便我可以将其存储在我的数据库中。这可以通过 solr 直接实现吗?通过命中-count,我的意思是,如果我正在搜索特定关键字,则为 Solr 索引中每个文档的索引字段中出现的次数。)

SOLR 结果实际上是根据文档的相关性得分正确排序的,其中包括词频和许多其他较小的因素....我只想返回命中数:我想知道是否有直接获取命中计数的方法,或者更改 Solr 对文档的评分方式,使其仅根据词频因子进行评分,并在我的 SOLR 输出中获取每个文档的词频值

【问题讨论】:

    标签: c# .net lucene solr solrnet


    【解决方案1】:

    使用solr 4.0比较容易,只需在fl参数中添加一个伪字段即可:

    q=*:*&fl=*,termfreq(field,term)
    

    如果你喜欢也可以命名返回值:

    q=*:*&fl=*,tf:termfreq(field,term)
    

    【讨论】:

      【解决方案2】:

      我可以从 Solr 中提取命中计数值吗? 根据命中数对结果进行排序

      您的标题主题是关于“命中数”,但是通过阅读您的文字,它会接缝,您对 solr 分数感兴趣 - 因为默认情况下 solr 按分数排序 - 这就是您所说的“命中数”吗?

      是否有从 Solr 中提取命中计数的既定方法?

      是的,可以获得搜索文档的“分数”值(顺便说一下,也可以获得命中数)

      要获得分数,只需将“字段列表”参数 (fl) 扩展为“分数”即可。 http://wiki.apache.org/solr/CommonQueryParameters#fl 例如,如果您有 DOCUMENT、ID、PTAH 字段 - 像这样添加分数: http://localhost:8080/solr/select/?fl=DOCUMENT,ID,PTAH,score 示例:

        <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">5</int>
          <lst name="params">
          <str name="start">0</str>
          <str name="fl">DOCUMENT,ID,PTAH,score</str>
          </lst>
        </lst>
      

      //更新:

      编号。发生次数

      一个(关键字)词在索引中出现的频率是多少?在特定领域? 所以分面搜索对你很重要:http://wiki.apache.org/solr/SolrFacetingOverview

      //更新2:

      第二次更新 - 如果您想计算一个文档中的关键字数量以便接收文档 ID 和该文档的单词数,您可以结合使用 facet search 和 facet range 查询范围。 示例:查看制造商“dell”的所有文档并返回每个文档(ID)的此关键字的频率

      ID -> "dell" exits how many times?
      241 -> 2
      242 -> 0
      243 -> 5
      

      为此,请使用以下搜索参数:

      <str name="facet.field">YOUR_TEXTFIELD</str>
      <str name="facet.range">ID</str>        <--- ID=field woth the document ID
      <str name="f.ID.facet.range.gap">1</str> <--- count ID in step of 1
      <str name="f.ID.facet.range.start">0</str>   <--- start ID for faceted search
      <str name="q">dell</str>                   <---string, "keyword" to look/count for
      <str name="f.ID.facet.range.end">1000</str> <--- end ID for faceted search
      <str name="facet">true</str>
      <str name="facet.method">enum</str>
      

      【讨论】:

      • 我想要关键字在单个文档中出现的次数:例如,如果文档 A 出现 4 次该字符串,则文档 B 出现 7 次,那么我的 solr 服务器应该返回给我: 1)我想要从文档中获取的信息(在我的例子中,只是 id)2)值 4 和 7。
      • 我相信分面搜索只会告诉您有多少文档满足特定查询..例如,如果我有 7 份与公司相关的文档说戴尔,那么“戴尔”上的分面搜索将返回给我文档列表和值 7 :不是 dell 在每个文档中出现的次数!
      • 这些参数是否必须在标准搜索请求处理程序下的 solrconfig.xml 中定义?还是在生成查询时通过 url 传递给服务器?
      • 你可以把它们放到url中,比如&f.ID.facet.range.gap=1&f.ID.facet.range.start=1000 ...end等等
      • 我尝试了你的建议,但它不起作用:我想要的是文档 id 导致查询“dell”的正匹配,该查询在 16 个文档中重复了 4 次文件,其他人都没有戴尔。我将文本字段设置为 facet.field 和 testid(与文档 ID 具有相同数据的 int 字段)作为 facet.range(您指定的其他参数):结果我得到的是一组文本值如果存在则标记为 1 的字段,如果结果中不存在则标记为 0 的字段,以及一组文档 ID,仅计数 1009 为 1。
      猜你喜欢
      • 1970-01-01
      • 2012-04-06
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多