2011-09-08 85 views
0

我工作在一個項目實施的Solr而現在我被困在一個特定的搜索包括ARR場使用多值字段。問題是:在地圖功能

我想搜索的子標識的對象上,這些子ID是存儲在一個多值字段,如:

<arr name="SubIds"> 
    <int>12272</int> 
    <int>12304</int> 
    <int>12306</int> 
</arr> 

查詢(或查詢的一部分)我想要使​​用如下: map(SubIds,i,i,1,0)

例如,當我在上面的map函數的'i'空間填充12304時,我會期待我的函數返回1.如果我輸入12345,它應該返回0.事情是,當我運行這個查詢時,它返回0,或「沒有數字12304在這個字段中,我返回0」。

當從我的地圖功能刪除0我可以看到實際的價值退還給我(12304時返回1,當不同的返回值),在這種情況下,這是12306!我已經嘗試了一些不同的多值字段,但結果是一樣的;它看起來像函數檢查多值字段中的最後一個值與我填充的ID相對應。

這是真的嗎?如果是這樣,有沒有辦法查看整個arr,並且只有在整個多值域中不存在該值時才返回0?

** 編輯:這只是一個預感,但它可能是當map()函數看到所有項目都是int類型(例如)時自動命令arr列表。這可能意味着該地圖返回的第一個數字(最高),這將(在我的例子中)是12306,而不是12304 ... *

謝謝!

+0

這是什麼map()函數?誰實施了,以及對SOLR進行了哪些查詢?你正在使用分面來計算SubIds中的值? 你能分享這個地圖功能嗎? – Dorin

+0

這是標準的地圖功能,可以用來查詢...有關地圖()的更多信息,請查看官方網站:http://wiki.apache.org/solr/FunctionQuery#map – tkamphuis

+0

對SOLR的完整查詢是如下所示: ?q = {!func} map(SubIds,12304,12304,1,0)&fl = *,score&sort = score%20desc 這是什麼意思,說我用faceting來計數SubIds?有沒有辦法對SubIds arr中的不同值進行求和?這將節省我的一天... – tkamphuis

回答

1

...它看起來像函數查詢不與多值下地幹活......

http://lucene.472066.n3.nabble.com/Using-multivalued-field-in-map-function-td3318843.html#a3322023

功能查詢不與多值字段的工作。 http://wiki.apache.org/solr/FunctionQuery#Vector_Functions

給出下面的情況下,有沒有人誰對我怎樣可以查詢所需的數據更好的主意嗎?

我有一個網站全面的相關博客文章和博客帖子每個具有所有者, 該所有者通過他/她的ID refererred來。例如:BloggerId = 123這也有可能是博客有多個合作的作家,其 也由那裏被稱爲BloggerId但這些ID是存儲在 的多值字段,在我前面的例子SubIds。

當一個特定的博客搜索一個搜索BloggerId。 SearchResult所是由許多的變數,在 國家/國家/更具體的地質資料,該blogcategory等 影響,爲此,我用一個多面的查詢。接下來我想讓一些結果更爲重要,這取決於BloggerId,我試圖用 做以下查詢:

?q = {!func} map(sum(map(BloggerId,12304,12304,2,0),map(BloggerId,12304,12304,1,0)),3,3,2)& fl = *,得分& facet.field =國家& f.Country.facet.limit = 6 & facet.field =國家& FQ =(BlogCategory:上網%20OR%20BlogCategory:體育&排序=得分%20desc,頂部%20desc,%20SortPriority%20asc &開始= 0 & omitHeader =真

在結果列表中,通過BloggerId 12304寫博客應該是 名列榜首,其次是博客在那裏BloggerId 12304是 聯合編劇。在那之後,後面的條件的所有其他博客,但 未寫入(或共同寫入)b ŸBloggerId 12304.

也許我能做出這樣的多值字段的字符串字段(其中id的被分隔「;」)和查詢自己的價值,但如果一個人有一個更好的主意你隨時歡迎!

最後,我選擇添加一個帶有空格的字符串值字段來分隔不同的值。之後,我使用solr.WhitespaceTokenizerFactory類快速掃描字符串以查找特定ID的出現。