Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr 在map函数中使用多值字段_Solr - Fatal编程技术网

Solr 在map函数中使用多值字段

Solr 在map函数中使用多值字段,solr,Solr,我正在一个项目中实现Solr,现在我被困在一个特定的搜索中,包括一个arr字段。问题是: 我想搜索对象上的子id,这些子id存储在多值字段中,例如: <arr name="SubIds"> <int>12272</int> <int>12304</int> <int>12306</int> </arr> 12272 12304 12306 我要使用的查询(或部分查询)如下所示:

我正在一个项目中实现Solr,现在我被困在一个特定的搜索中,包括一个arr字段。问题是:

我想搜索对象上的子id,这些子id存储在多值字段中,例如:

<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范围内