我正在努力在一个项目中实现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 ...... *
谢谢!
答案 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的出现。