我使用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。
有什么建议吗?
谢谢! 利
答案 0 :(得分:0)
我应该使用问题中列出的地图:
@Field("spell_text_*")
public Map<String, String> spellText;
我去了SolrJ代码库并查看了单元测试以查看代码的期望。
然后我需要将代码更改为从JSON中的各种spell_text字段中读取,并使用字段名称和值更新spellText映射。我决定为Gson代码创建一个文档类(尽管我可以使用JsonObject.get(&#34; spell_text _&#34;),另一个类用于SolrInputDocument。