动态字段最终会将错误的字段名称索引到solr中

时间:2017-09-13 02:49:20

标签: json solrj

我使用solr 6.6和solrJ 6.6。我有一些使用Gson读取json对象的代码,我有SolrJ的注释,所以我可以索引对象。我对Gson和SolrJ的组合做错了,但我不确定究竟是什么。

我的问题是其中一个字段是一个动态字段,它最终被索引为SolrJ为动态字段创建的部分正则表达式值。

我希望/期望的是将以下json索引到带有字段" id"的solr中。和" spell_text_en-us"。

{"id":"abc123", "spell_text_en-us":"abc123"} 

相反,solr最终会得到字段" id"和" spell_text _。*"。

以下是架构代码段:

<dynamicField name="spell_text_*" type="spell" indexed="true" stored="true"/>

以下是solr查询返回的solr文档示例:

{
  "id": "70427-7534088-de",
  "spell_text_.*": "Getoasteter",
  "_version_": 1578390437688770600
}

以下是I类的精简版:

public class ExampleDoc {
    @SerializedName("id")
    @Field("id")
    public String id;

    @SerializedName(value="spell_text_en-us",
      alternate={
        "spell_text_de",
        "spell_text_fr"
      }
    }
    @Field("spell_text_*")
    public String spellText;
} 

我的假设是我的spellText字段声明不正确,并且它应该像这样声明:

@SerializedName(value="spell_text_en-us",
  alternate={
    "spell_text_de",
    "spell_text_fr"
  }
}
@Field("spell_text_*")
public Map<String, String> spellText;

但是,如果我将该字段声明为Map,那么Gson解析器就无法将json反序列化为ExampleDoc。

有什么建议吗?

谢谢! 利

1 个答案:

答案 0 :(得分:0)

我应该使用问题中列出的地图:

@Field("spell_text_*")
public Map<String, String> spellText;

我去了SolrJ代码库并查看了单元测试以查看代码的期望。

然后我需要将代码更改为从JSON中的各种spell_text字段中读取,并使用字段名称和值更新spellText映射。我决定为Gson代码创建一个文档类(尽管我可以使用JsonObject.get(&#34; spell_text _&#34;),另一个类用于SolrInputDocument。