我有一个包含两个字段的电子邮件的Solr 3.1数据库:
对于查询,我有两个参数:
是否可以创建
的查询带日期的部分并不复杂:
fq=datetime[YY-MM-DDT00:00:00.000Z TO YY-MM-DDT23:59:59.999Z]
我知道您可以通过这种方式提升关键字:
q=text:"first keyword"^5 OR text:"second one"^2 OR text:"minus scoring"^0.5 OR text:"*"
但是,我如何仅使用关键字对此列表进行排序并获取所有条目而不是进行真正的查询并仅返回几个条目?
感谢您的帮助!
答案 0 :(得分:1)
您需要在主查询中指定您的条款,然后通过添加以下内容将日期查询更改为对这些结果的过滤查询。
fq=datetime[YY-MM-DDT00:00:00.000Z TO YY-MM-DDT23:59:59.999Z]
所以你应该有这样的东西:
q=<terms go here>&fq=datetime[YY-MM-DDT00:00:00.000Z TO YY-MM-DDT23:59:59.999Z]
修改:关于过滤查询的更多信息(由rfreak建议)。
来自Solr Wiki - FilterQuery Guidance - “现在,什么是过滤查询?它只是查询的一部分,需要进行特殊处理。这可以通过使用fq指定它在Solr中实现(过滤查询)参数而不是q(主查询)参数。可以实现相同的结果,将查询部分保留在主查询中。区别在于查询效率。这是因为过滤查询的结果被缓存然后使用使用set intersection过滤主要查询结果。“
这些应该已经按相关性分数排序,这只是Solr的默认行为。您可以通过添加该字段来查看分数。
fl=*,score
如果在http://<yourserver:port#>/<instancename>/admin/form.jsp
上安装Solr的管理界面上使用完整界面进行查询,您将看到可以指定过滤查询,字段和其他选项的位置。您可以查看Solr Wiki以了解有关选项及其使用方式的更多详细信息。
我希望这会对你有所帮助。
答案 1 :(得分:1)
您可以首先查询:
fq = datetime [YY-MM-DDT00:00:00.000Z至YY-MM-DDT23:59:59.999Z]
,它提供与范围匹配的所有文档。然后,使用CachingWrapperFilter进行第二次查询,从第一个查询中查找DocSet中至少有一个关键字的文档。它们将按照tf-idf排列相关性。您可能希望首先使用ConstantScoringQuery以最快的方式获取匹配的docid列表。
答案 2 :(得分:0)
按相关性排序是solr / lucene的默认行为。
如果您的结果不满意,请尝试将关键字放在引号
中//编辑:从Paige Cook那里得到答案,使用像这样的想法
q="important thing"&fq=datetime[YY-MM-DDT00:00:00.000Z TO YY-MM-DDT23:59:59.999Z]
// 2。更新。通过思考这个答案:引用不是一个好主意,因为在这种情况下,你只会收到“重要的东西”邮件,但没有“重要的”,
要点是:您使用的是哪些关键字。因为:搜索 - 重要的事情 - 导致“重要的事情”邮件得分最高。但是lucene不知道,关键词如何得分“重要”或“不那么重要,但超过平均”。 另一个想法是只搜索“重要”。但是字段值“importand thing”和“importand too”给出几乎相同的分数值,因为50%的搜索关键字(在此键中:“已导入”)是字段值的一部分。 所以你可能需要更改关键字。它可以在将“importend to”更改为“也是一个重要的邮件”之后工作,以获得搜索词“重要”和字段值的野兽比率,以便将最短的Mail-discripton评分为最高值。