Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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
Java 索尔。更新文档多值字段(无dup值),而无需提交该字段_Java_Solr_Lucene - Fatal编程技术网

Java 索尔。更新文档多值字段(无dup值),而无需提交该字段

Java 索尔。更新文档多值字段(无dup值),而无需提交该字段,java,solr,lucene,Java,Solr,Lucene,抱歉,文字太长,有点难以解释: 我们正在使用Solr索引一些用户信息,如用户名、电子邮件(以及其他信息) 我还尝试使用facets进行搜索,例如,我为用户添加了一个名为“organizations”的多值字段,我将在其中存储用户工作的组织的名称 因此,我可以将该字段用于facetted搜索,并能够根据该用户工作的组织筛选用户搜索查询结果 现在,我遇到的问题是,我的代码执行以下操作: 1) 将用户文档添加到Solr 2) 为用户分配组织成员资格(角色)时,更新用户文档以设置“组织”字段 现在,我对

抱歉,文字太长,有点难以解释:

我们正在使用Solr索引一些用户信息,如用户名、电子邮件(以及其他信息)

我还尝试使用facets进行搜索,例如,我为用户添加了一个名为“organizations”的多值字段,我将在其中存储用户工作的组织的名称

因此,我可以将该字段用于facetted搜索,并能够根据该用户工作的组织筛选用户搜索查询结果

现在,我遇到的问题是,我的代码执行以下操作: 1) 将用户文档添加到Solr 2) 为用户分配组织成员资格(角色)时,更新用户文档以设置“组织”字段

现在,我对步骤2有以下问题: 如果我只是在用户文档上添加一个addField(“organizations”,“BigCorp”),它将添加该值,而不管组织是否已经有该值(“BigCorp”),但我希望每个组织名称只显示一次

因此,我发现获得该行为的唯一方法是查询用户文档,获取“organization”的值,并且仅在该值不在其中时添加新值-如果!userDoc.getValues(“organiations”)。包含(值){…将值添加到文档并保存它…}-

现在这很好,但前提是我一直都在提交(至少在步骤1和步骤2之间),因为除非文档查询已经提交,否则它将无法工作。显然,从理论上讲,最好不要一直提交性能方面的内容,这是不现实的,因为我是成批处理这些插入内容的

所以我想主要的问题是:

  • 有没有一种方法可以在不允许重复的情况下更新多值字段,而不需要查询文档来手动防止重复

  • 也许有更好的办法

谢谢。

有几件事-

  • 对于镶嵌面字段中的多个重复值,镶嵌面字段中的值只计算一次。因此,即使添加多个相同的值,也会在facet count条目中作为单个值反映出来。我们已经对此进行了测试。你也可以证实
  • 另外,在重新索引文档时,为什么需要检查现有文档中的内容。我认为您将拥有唯一的组织列表,当提交给Solr时,该文档将被删除并插入
谢谢,是的,我想可以多次添加值,实际上在我的场景中,这是有意义的。