2012-08-10 32 views
1

在Solr的索引的記錄,可以說,我有這個樣本記錄(例如JSON):SOLR查詢自定義排序篩選結果?

{ 
    "title":"Innovation Life and Strategy", 
    "author":"Sarah Howard", 
}, 
{ 
    "title":"Simple Life", <--- This will be ignored 
    "author":"W. David", 
}, 
{ 
    "title":"Today's Innovations", 
    "author":"Michael Wayne", <--- This Author will be listed at the top 
}, 
{ 
    "title":"The Innovation Records", 
    "author":"Tommy Wright", 
}, 
etc .. 

如何讓Solr的查詢到:

  • 通過innovationtitle領域
    過濾(所以我們有3條記錄)
  • 然後,排序結果通過將作者:Wayne在頂部

所以最終的結果應該是:

{ 
    "title":"Today's Innovations", 
    "author":"Michael Wayne", 
}, 
{ 
    "title":"Innovation Life and Strategy", 
    "author":"Sarah Howard", 
}, 
{ 
    "title":"The Innovation Records", 
    "author":"Tommy Chen", 
}, 

我只得到了第一個步驟,fq=title:*Innovation*

但我不知道第二步(自定義排序)查詢。
我怎樣才能得到它?

+0

什麼是自定義排序的基礎或邏輯或規則?有沒有任何固定的邏輯? – Jayendra 2012-08-10 09:00:56

+0

我不知道。你知道嗎? – 2012-08-10 09:07:58

+0

我的意思是你的自定義排序背後的邏輯是什麼?因爲在這種情況下,重點看起來很方便,但在其他方面會有所不同。你可以提高你的結果,這將導致它總是出現。但是,如果沒有任何規則集,這將是沒有意義的,也不是通用的。 – Jayendra 2012-08-10 09:37:06

回答

0

在這種情況下,我不認爲這是可能的,因爲作者是一個多值字段,因爲有2個值:名字和姓氏。 所以,如果你想通過姓訂購,你要這個領域分成2個領域:通過使用數據導入處理程序 AUTHOR_FIRST_NAME,author_surname

您可以在索引時間分割名稱,例如。

另一種解決方案是在java中編寫自己的排序算法。

點(在任何情況下)是找到的surename是什麼,因爲並不是每一個名字只由2名,像Docotor Tommy Chenkim jong il的 - 也有存在的姓氏由2名(特別是在亞洲)。

這是真正的問題,我認爲。

+0

嗯..至少,你如何篩選後的單值字段? – 2012-08-10 09:10:09

+0

fq = title:*創新*&排序=作者desc看看這個:http://wiki.apache.org/solr/CommonQueryParameters#sort – 2012-08-10 09:17:46

+0

不,沒有放置排序將放置'wayne'在頂部。只是簡單的A〜Z順序。 – 2012-08-10 09:19:07

4

您可以使用字段提升而不是排序。詳情請看http://wiki.apache.org/solr/SolrRelevancyFAQ

你可能需要類似:

q=title:*&bq=author:Wayne^10&fq=title:*Innovation* 

這產生了具有標題中包含「創新」,這些得分匹配「韋恩」更高的所有文件。

確保「作者」用WhitespaceTokenizer被索引(相對於KeywordTokenizer),否則您將無法使用分開的話(見http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters)進行查詢。