在没有指定字段的情况下在Lucene / Solr中执行搜索后,如何知道搜索字符串在哪个字段中找到了搜索字符串(以及频率)?
答案 0 :(得分:3)
您可以使用Query Highlighting。
答案 1 :(得分:3)
尝试设置debugQuery=on
。请参阅this example。
答案 2 :(得分:1)
如前所述,使用debugQuery = true。然后,响应将包括“解释”部分。默认情况下,这将为您提供一些可怕的格式化文本,如下所示:
0.69102794 = (MATCH) weight(body:arrai^1.5 in 6357), product of:
0.46610788 = queryWeight(body:arrai^1.5), product of:
1.5 = boost
5.591044 = idf(docFreq=55709, maxDocs=5492855)
0.055577915 = queryNorm
1.4825494 = (MATCH) fieldWeight(body:arrai in 6357), product of:
2.828427 = tf(termFreq(body:arrai)=8)
5.591044 = idf(docFreq=55709, maxDocs=5492855)
0.09375 = fieldNorm(field=body, doc=6357)
对于每个字段中的每个匹配,您将得到一个这样的块,它解释了SOLR如何计算此文档与查询的相关性。您要问的是什么(本文档字段中有多少匹配)SOLR称术语频率为“tf”。你可以在我上面粘贴的输出的第7行看到这个。在这一行中,SOLR告诉你它在名为“body”的字段中找到了arrai的8个匹配项。
其他行代表反向文档频率 - “idf”(匹配项有多少)和fieldNorm,它与文档字段相对于匹配的时间有关。您可以在此处了解这些内容:http://wiki.apache.org/solr/SolrRelevancyFAQ
仅供参考,如果您需要以结构化格式提供此“解释”信息而不是笨拙的文本,您可以使用您的查询传递此参数:debug.explain.structured = true但是,它仍然很难使用=)