【问题标题】:Creating EnumType Solr using SolrJ使用 SolrJ 创建 EnumType Solr
【发布时间】:2018-04-28 17:13:15
【问题描述】:

我需要创建一个包含少量枚举的架构。我正在尝试使用 SolrJ 来做到这一点。 我找到了这个链接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);

【问题讨论】:

    标签: solr solrj


    【解决方案1】:

    首先你需要在架构中指定你的枚举字段,就像在文档中一样:

    <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 动态创建此 fieldType,如下所示:

    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&lt;String,Object&gt; attributes) 会有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多