Solr 在map函数中使用多值字段
我正在一个项目中实现Solr,现在我被困在一个特定的搜索中,包括一个arr字段。问题是: 我想搜索对象上的子id,这些子id存储在多值字段中,例如:Solr 在map函数中使用多值字段,solr,Solr,我正在一个项目中实现Solr,现在我被困在一个特定的搜索中,包括一个arr字段。问题是: 我想搜索对象上的子id,这些子id存储在多值字段中,例如: <arr name="SubIds"> <int>12272</int> <int>12304</int> <int>12306</int> </arr> 12272 12304 12306 我要使用的查询(或部分查询)如下所示:
<arr name="SubIds">
<int>12272</int>
<int>12304</int>
<int>12306</int>
</arr>
12272
12304
12306
我要使用的查询(或部分查询)如下所示:
映射(子ID,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*
谢谢 。。。看起来函数查询不适用于多值字段 : 函数查询不适用于多值字段。 鉴于以下情况,是否有人对如何查询所需数据有更好的想法 我有一个满是博客的网站,每个博客都有一个所有者, 此所有者通过其id被引用。例如:BloggerId = 123. 博客也可能有多个合著者,这 也被BloggerId引用,但这些id存储在 多值字段,在我前面的示例subid中 当搜索特定的博主时,会搜索博主ID。 搜索结果受许多变量的影响 国家/州/更具体的地质数据、类别等。 为此,我使用分面查询。接下来我想做一些更详细的结果 重要的是,根据BloggerId,我尝试使用 以下查询: q={!func}图(和(图(BloggerId,1230412304,2,0),图(BloggerId,1230412304,1,0)),3,3,2)和fl=*,分数和刻面。字段=国家和f.Country.刻面。限制=6和刻面。字段=状态和fq=(BlogCategory:internet%20OR%20BlogCategory:sports&sort=score%20desc,Top%20desc,%20OrtPriority%20asc&start=0&omitHeader=true) 在结果列表中,BloggerID12304撰写的博客应该位于 排名第一的是BloggerID12304所在的博客 在那之后,所有其他遵循标准的博客 不是BloggerID12304写的(或合著的) 也许我可以将这个多值字段设置为字符串字段(其中id以“;”分隔)并查询我的值,但如果您有更好的想法,欢迎光临
最后,我选择添加一个带空格的字符串值字段来分隔不同的值。之后,我使用solr.WhitespaceTokenizerFactory类快速扫描字符串以查找特定ID的出现情况。这是什么映射()函数??是谁实现的,对SOLR进行了什么查询?您正在使用刻面来计算子ID中的值?您可以共享此映射函数吗?这是一个标准的映射函数,可以用来查询…有关map()的更多信息,请查看官方网站:对SOLR的完整查询如下:?q={!func}map(子ID,1230412304,1,0)&fl=*,score&sort=score%20desc,你说我使用刻面来计算子ID中的值是什么意思?有没有办法对子ID arr中的不同值进行求和?这样可以节省我的时间…我直到现在才使用map函数,可能这是处理多值字段时的默认行为。尝试使用范围刻面。它将统计有多少文档的值在.facet.range=SubIds&f.SubIds.facet.range.start=12304&facet.range.include=lower范围内