2011-05-27 32 views
0

我有一个包含电子邮件,其中包含两个字段一个Solr的3.1数据库:Solr:如何获得按关键字列表排序的所有文档?

  • 日期时间
  • 文本

对于查询我有两个参数:

  • 的今天
  • 日期
  • 关键字数组(“重要的事情”,“重要的”,“不那么重要,但超过平均水平”)

是否有可能创建一个查询到

  1. 下令他们得到这一天的所有文件和
  2. 按相关性排序它们,这样的电子邮件包含了大部分我的关键字(重要的事情)分数最好?

与日期的部分是不是很复杂:

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:"*" 

但我怎么只使用关键词排序这个列表并获得所有条目而不是做一个真正的查询,并且只返回几个条目?

感谢您的帮助!

回答

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 - “现在,什么是过滤器查询这仅仅是一个因素出了特殊处理查询的一部分,这是Solr中使用FQ(过滤查询)参数,而不是指定它实现的? (主要查询)参数的结果相同的结果可以实现在主查询中留下该查询部分,差异将在于查询效率,这是因为过滤器查询的结果被缓存,然后用于过滤主要查询使用集合交集的结果“。

这些应该按相关性分数排序,这只是Solr的默认行为。您可以通过添加该字段来查看分数。

fl=*,score 

如果使用全接口让您的Solr安装在管理界面的质疑在http://<yourserver:port#>/<instancename>/admin/form.jsp你会看到,你可以指定过滤查询,字段和其他选项。您可以查看Solr Wiki了解更多关于选项及其使用方式的详细信息。

我希望这可以帮助你。

+0

+!过滤器查询是一个很好的建议。您可以考虑增加一些关于在那里使用过滤器查询的优点。 – rfeak 2011-05-27 14:55:33

+0

谢谢!筛选器查询按预期工作。但不幸的是,我仍然不知道如何处理关键字,因为他们过滤电子邮件而不是只对它们进行排序。 – Daniel 2011-05-27 16:06:47

0

按相关性排序是solr/lucene的默认行为。

如果结果不满意,尽量把关键词放在引号

//编辑:如下因素从佩奇库克的回答,请somethink像

q="important thing"&fq=datetime[YY-MM-DDT00:00:00.000Z TO YY-MM-DDT23:59:59.999Z] 

// 2。 nd更新。通过思考这个答案:报价不是一个好主意,因为在这种情况下,你只会收到“重要的东西”的邮件,但没有“重要的”

该问题是:你使用什么关键字。因为:搜索 - 重要的事情 - 导致“重要”邮件的分数最高。但lucene不知道,如何评分“重要太”或“不那么重要,但超过平均水平”与您的关键字有关。 另一个想法是只搜索“重要”。但字段值“importand thing”和“importand too”给出的分值几乎相同,因为搜索到的关键字(在此键中:“导入”)的50%是字段值的一部分。 所以可能你必须改变你的关键字。它可以在将“importend”改为“也是重要邮件”之后起作用,以获得搜索词“重要”和字段值的野兽比率,以便将最短的Mail-discripton评分为最高值。

+0

感谢您的回答!你完全指向我的问题,因为关键字会过滤文档,而不是只将它们排序,从而影响相关性分数。我不知道如何处理这个问题。 – Daniel 2011-05-27 16:13:00

1

你可以做的第一个查询:

FQ =日期时间[YY-MM-DDT00:00:00.000Z来YY-MM-DDT23:59:59.999Z]

这给所有文件与范围相匹配。然后,使用CachingWrapperFilter进行第二个查询,以便从第一个查询中找到DocSet中具有至少一个关键字的文档。他们将按照tf-idf排列的相关性。您可能希望首先使用ConstantScoringQuery以最快的方式获取匹配的文档的列表。