2016-06-28 75 views
0

我需要搜索基於一個故事的標籤有關的故事有關的故事..搜索基於標籤優先的基礎上

說我有4個標籤的故事,所以我的相關報道邏輯將

  • 步驟1:搜索下一個故事>>展示故事所有4個標籤

  • 步驟2:搜索3個標籤創建不同的排列&組合相關標籤>>展示故事

  • 步驟3:搜索2個標籤創建與標籤>>展示故事的不同排列組合&
  • 步驟4:搜索標籤一前一後如果找到,在「更多像這樣」字段中顯示相同。

我該如何做到這一點。我是Solr的新手請指導我...

+0

我不知道我明白你想做什麼。你能提供一個例子嗎? – Thomas

+0

@Thomas我真正想要做的是,如果一個故事中的所有4個標籤都在我父母的故事中提到,它將在第一個結果中出現,然後如果有效的話至少有3個標籤的故事2標籤等等...... – mridul4c

+2

嗯,在這種情況下,您可能想要了解lucene/solr如何進行評分,但如果您搜索4(可選)標籤,則評分應該越高,得到的匹配越高。所以你可能只需發出一個相應的查詢並完成(類似於'tags:tag1或者tags:tag2等等 - 不完全確定確切的語法)。 – Thomas

回答

0

托馬斯在評論中的建議是一個好主意,但可以給你錯誤的結果 - 例如,如果你有兩個非常普通的標籤和兩個獨特的兩個故事在問題中。即:

  • 故事1(FOO,欄,是)
  • 故事2(FOO,酒吧,撫,BARF)
  • 故事3(巴茲,欄,是)
  • ..重複成千上萬的其他故事以「」和「是」爲標籤

如果顯示的第一個條目時,搜索tag:(foo OR bar OR the OR is),你可能得到總動員2而不是 - 因爲它有最「值錢「標籤(和默認計算Solr使用該術語在文檔中出現的次數除以其出現的文檔總數)。

最好結果可能是(這將取決於你的使用情況)還是總動員2,但如果你真的想要得到它匹配三個標籤的文件,你就必須這樣做一不同的方式。

如果您需要第二個選項,您可以使用函數查詢來解決此問題:termfreq返回文檔中某個術語的次數(以及您的標籤在文檔中不同,這將是1)。 sum允許你從每個功能的值相加,所以像:

sum(termfreq(tag, 'foo'), termfreq(tag, 'bar'), termfreq(tag, 'the'), termfreq('is')) 

..會給你在每次使用排序文檔不同標籤計數。

您還可以選擇使用自定義相似性類,它將爲每個術語返回相同的相似性分數(並且根據您使用的Solr版本,可以爲每個字段設置相似性(而不僅僅是核心))。我不認爲有一個,but there's plenty of examples available