SOLR评分:我可以从Solr中提取命中数值吗?

时间:2011-06-28 06:23:16

标签: c# .net lucene solr solrnet

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

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

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

  3. 我很抱歉我的问题看起来有些混乱。我只希望每个文档从Solr返回的命中计数,以便我可以将它存储在我的数据库中。这是否可以通过solr直接实现? -count,我的意思是,如果我正在搜索特定的关键字,Solr索引中每个文档的索引字段中出现的次数。

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

2 个答案:

答案 0 :(得分: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和该文档的单词数,您可以将构面搜索与构面范围查询范围结合使用。 示例:查看制造商“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>

答案 1 :(得分:1)

使用solr 4.0只是向fl参数添加伪字段相对容易:

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

如果您愿意,也可以为返回值命名:

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