2011-09-08 97 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的出现。