在map函数中使用多值字段

时间:2011-09-08 06:55:41

标签: solr

我正在努力在一个项目中实现Solr,而现在我仍然坚持使用包括arr字段在内的特定搜索。事情是:

我想在一个对象上搜索sub-id,这些sub-id存储在一个多值字段中,例如:

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

我想要使用的查询(或查询的一部分)如下: 地图(SubIds,I,I,1,0)

例如,当我在上面的map函数中的'i'空格上填充12304时,我希望我的函数返回1.如果我输入12345它应该返回0.事情就是当我运行这个时查询它返回0,或“此字段中没有数字12304,我返回0”。

当从我的地图函数中删除0时,我可以看到返回给我的实际值(当12304返回1时,当返回值不同时),在这种情况下是12306!我用一些不同的多值字段尝试了这个,但结果是一样的;看起来该函数正在检查多值字段中的最后一个值与我填写的ID。

这是真的吗?如果确实如此,是否有任何方法可以查看整个arr,只有在整个多值字段中不存在该值时才返回0?

** 编辑:这只是一种预感,但是当它看到所有项目都是int类型(例如)时,map()函数可以自动命令arr列表。这可能意味着地图会返回第一个数字(最高)(在我的例子中)是12306,而不是12304 ...... *

谢谢!

1 个答案:

答案 0 :(得分:1)

...看起来函数查询不适用于多值字段...

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

  

函数查询不适用于多值字段。   http://wiki.apache.org/solr/FunctionQuery#Vector_Functions

鉴于以下情况,是否有人对如何查询所需数据有更好的了解?

  

我有一个充满博客帖子的网站,每个博文都有一个所有者,   这位老板通过他/她的身份证明。例如:BloggerId   = 123.博客也有可能有多个共同编写者   也有BloggerId引用,但这些id存储在   多值字段,在我之前的示例中为SubIds。

     

搜索特定博客时,可以搜索BloggerId。   搜索结果受到许多变量的影响   国家/州/更具体的地质数据,博客类别等   为此我使用了一个facetted查询。接下来我想更多地做一些结果   重要的是,根据BloggerId,我试图用这个来做   以下查询:

     ?

Q =地图(总和(地图(BloggerId,12304,12304,2,0),图(BloggerId,12304,12304,1,0)),3,3,2)及{FUNC!}; FL = *,得分和放大器; facet.field =国家&放大器; f.Country.facet.limit = 6&安培; facet.field =国家和放大器; FQ =(BlogCategory:上网%20OR%20BlogCategory:体育和放大器;排序=得分%20desc,顶部%20desc, %20SortPriority%20asc&安培;开始= 0&安培; omitHeader =真

     

在结果列表中,应该启用BloggerId 12304编写的博客   列表的顶部,然后是BloggerId 12304所在的博客   联合作家。之后,所有其他博客都遵循标准但是   不是由BloggerId 12304编写(或共同编写)。

也许我可以将这个多值字段变成一个字符串字段(其中id用“;”分隔)并查询我的值,但如果有更好的想法,那么随时欢迎你!

最后,我选择添加一个带有空格的字符串值字段来分隔不同的值。之后,我使用solr.WhitespaceTokenizerFactory类快速扫描字符串以查找特定ID的出现。