0

Map を含む Spring-Data-Elasticsearch @Document アノテーションを使用してドキュメント (Java POJO) を保存する最良の方法についての情報が必要です

@Document(indexName = "downloadclienterrors", type = "downloadclienterror")
public class DownloadClientErrorLogElasticsearch {

    @Id
    private Long id;

    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String host;
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String shortMessage;
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String fullMessage;

    @Field(type = FieldType.Date)
    private String clientTimestamp;

    private Integer level;

    private Map<String, String> additionalFieldList;

    ...
}

POJO がこの 1 番目のクラスで作成されるように、リポジトリを介してエラスティック検索インスタンスに保存できます。

これは、データを追加する方法です。追加する JSON フィールドを柔軟にしたいと考えています。これは、クライアント ソフトウェアから柔軟に対応できるためです。

    additionalFieldList.put("url", "http://www.google.de");
    additionalFieldList.put("user_agent", "Browser/1.0.0 Windows");

私の問題は、.not_analyzed としてマークされた additionalFieldList のフィールドも必要であることです。(fe additionalFieldList.url, additionalFieldList.user_agent)。私は、マップ上の文字列の FieldIndex.not_analyzed アノテーションと同じ動作をしたいと思いますが、もちろんマップ内の値に対してのみです。

    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private Map<String, String> additionalFieldList;

しかし、ドキュメントを保存しようとするとうまくいきません。醜い例外を受け取ります。

誰かが方法を知っている場合、またはelasticsearchでそのようなドキュメントを設計する方が良い方法を知っている場合、私はこの分野では新鮮で新しいので、コメントを聞きたいです。

以前はありがとう、そしてハンブルグからのご挨拶、

トミー・ジーグラー

4

2 に答える 2

0

@Mapping アノテーションを使用して、 dynamic_templatesを構成できます。

マッピング ファイルをクラスパスに配置し、POJO に @Mapping で注釈を付けるだけです。

マッピング例

JSON

{
    "downloadclienterrors": {
        "dynamic_templates": [
            {
                "additionalFieldList": {
                    "path_match": "additionalFieldList.*",
                    "mapping": {
                        "type": "string",
                        "index": "not_analyzed"
                    }
                }
            }
        ]

        ...

    }
}

ポジョ

@Mapping(mappingPath = "/downloadclienterrors.json")
@Document(indexName = "downloadclienterrors", type = "downloadclienterror")
public class DownloadClientErrorLogElasticsearch {

    ...

}
于 2015-05-10T00:17:45.803 に答える