2011-05-27 60 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以最快的方式獲取匹配的文檔的列表。

相關問題