2017-09-13 60 views
0

我使用solr 6.6与solrJ 6.6。我有一些使用Gson在json对象中读取的代码,并且我有SolrJ的注释,所以我可以为对象建立索引。我对Gson和SolrJ的组合做了错误的事,但我不确定究竟是什么。动态字段以索引到索引的错误字段名称结尾

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

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

{"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类”的精简版m使用:

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字段声明不正确,而且我T应当声明如下:

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

但是,如果我宣布字段作为地图则GSON解析器将无法在JSON反序列化到ExampleDoc。

有什么建议吗?

谢谢! 李

回答

0

我应该使用Map作为问题列举:

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

我去SolrJ代码库,并通过单元测试看,看看有什么代码期待。

然后,我需要更改代码以从JSON读取各种spell_text字段,并使用字段名称和值更新spellText映射。我决定为Gson代码使用一个文档类(尽管我可以使用JsonObject.get(“spell_text_”),另一个类是SolrInputDocument。