我对Solr的使用是生成主要搜索系统:我们基本上以小批量提供大量文档,并在其上搜索预先指定的查询。扫描这些文档中的每一个以查找此特定查询,如果找到,我们需要在数据库中存储该文档中该字符串的文件索引ID,路径和命中计数。我在网上搜索了从solr中为每个文档提取命中计数值的方法,但到目前为止我所理解的是Solr根据命中数和其他各种因素自动对其结果进行排序,您可以使用提升和函数查询参数。
是否有一种从Solr中提取命中数的既定方法?
如果没有,是否可以改变Solr的得分公式,使其仅考虑命中数,然后要求Solr返回得分(在这种情况下基本上是命中数)
(我很抱歉我的问题看起来有些混乱。我只希望每个文档从Solr返回的命中计数,以便我可以将它存储在我的数据库中。这是否可以通过solr直接实现? -count,我的意思是,如果我正在搜索特定的关键字,Solr索引中每个文档的索引字段中出现的次数。)
SOLR结果实际上是根据文档的相关性得分权进行排序的,其中包括术语频率和许多其他较小因素....我只想要返回命中数:我想知道是否有获取命中计数的直接方法,或改变Solr如何对文档进行评分以使其仅根据术语频率因子得分并获得SOLR输出中每个文档的术语频率值
答案 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)