0

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

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

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

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

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

4

2 回答 2

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,分数 示例:

  <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>
于 2011-06-28T09:44:09.967 回答
2

使用solr 4.0相对容易,只需在 fl 参数中添加一个伪字段:

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

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

q=*:*&fl=*,tf:termfreq(field,term)
于 2011-11-28T07:14:39.747 回答