使用 SolrJ 创建 EnumType Solr
Creating EnumType Solr using SolrJ
我需要创建一个包含少量枚举的架构。我正在尝试使用 SolrJ 来做到这一点。
我找到了这个 link DefininganEnumFieldinschema 但我找不到任何使用 Schema API 或 SolrJ 的示例。
这是我的枚举:
public enum Attributes {
SPONSORED("sponsored"),
TOP_RATED("top-rated"),
GENERIC("generic"),
PROMOTION("promotion"),
QUICK_ORDER("quick-order");
private String value;
Attributes(String value) {
this.value = value;
}
@Override
@JsonValue
public String toString() {
return String.valueOf(value);
}
@JsonCreator
public static Attributes fromValue(String text) {
for (Attributes b : Attributes.values()) {
if (String.valueOf(b.value).equals(text)) {
return b;
}
}
return null;
}
}
我想使用 SolrJ 向我的模式添加一个字段:
Map<String, Object> fieldAttributes = new LinkedHashMap<>();
fieldAttributes.put("name", "address.**attributes**");
fieldAttributes.put("type", "**attributesEnum**");
fieldAttributes.put("stored", true);
SchemaRequest.AddField addFieldRequest = new SchemaRequest.AddField(fieldAttributes);
addFieldRequest.process(client);
首先您需要在架构中指定您的枚举字段,如文档中所示:
<fieldType name="myEnumField" class="solr.EnumField" enumsConfig="enumsConfig.xml" enumName="attribute"/>
在 enumsConfig.xml 中,您将指定所有枚举值,例如:
<?xml version="1.0" ?>
<enumsConfig>
<enum name="attribute">
<value>sponsored</value>
<value>generic</value>
</enum>
</enumsConfig>
或者,您可以通过 Schema API 动态创建此字段类型,如下所示:
curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-field-type" : {
"name":"myEnumField",
"class":"solr.EnumField",
"enumsConfig":"enumsConfig.xml",
"enumName" : "attribute"}
}' http://localhost:8983/solr/demo/schema
你也可以在 SolrJ 中做到这一点,通过使用 org.apache.solr.client.solrj.request.schema.SchemaRequest.AddFieldType
,你需要指定 FieldTypeDefinition,方法 setAttributes(Map<String,Object> attributes)
将有帮助
我需要创建一个包含少量枚举的架构。我正在尝试使用 SolrJ 来做到这一点。 我找到了这个 link DefininganEnumFieldinschema 但我找不到任何使用 Schema API 或 SolrJ 的示例。
这是我的枚举:
public enum Attributes {
SPONSORED("sponsored"),
TOP_RATED("top-rated"),
GENERIC("generic"),
PROMOTION("promotion"),
QUICK_ORDER("quick-order");
private String value;
Attributes(String value) {
this.value = value;
}
@Override
@JsonValue
public String toString() {
return String.valueOf(value);
}
@JsonCreator
public static Attributes fromValue(String text) {
for (Attributes b : Attributes.values()) {
if (String.valueOf(b.value).equals(text)) {
return b;
}
}
return null;
}
}
我想使用 SolrJ 向我的模式添加一个字段:
Map<String, Object> fieldAttributes = new LinkedHashMap<>();
fieldAttributes.put("name", "address.**attributes**");
fieldAttributes.put("type", "**attributesEnum**");
fieldAttributes.put("stored", true);
SchemaRequest.AddField addFieldRequest = new SchemaRequest.AddField(fieldAttributes);
addFieldRequest.process(client);
首先您需要在架构中指定您的枚举字段,如文档中所示:
<fieldType name="myEnumField" class="solr.EnumField" enumsConfig="enumsConfig.xml" enumName="attribute"/>
在 enumsConfig.xml 中,您将指定所有枚举值,例如:
<?xml version="1.0" ?>
<enumsConfig>
<enum name="attribute">
<value>sponsored</value>
<value>generic</value>
</enum>
</enumsConfig>
或者,您可以通过 Schema API 动态创建此字段类型,如下所示:
curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-field-type" : {
"name":"myEnumField",
"class":"solr.EnumField",
"enumsConfig":"enumsConfig.xml",
"enumName" : "attribute"}
}' http://localhost:8983/solr/demo/schema
你也可以在 SolrJ 中做到这一点,通过使用 org.apache.solr.client.solrj.request.schema.SchemaRequest.AddFieldType
,你需要指定 FieldTypeDefinition,方法 setAttributes(Map<String,Object> attributes)
将有帮助