@Field アノテーションを使用してトークナイザーの失敗を構成する問題を解決する (Spring Data Elasticsearch)

問題の再発: データを挿入するときに、エンティティ クラスで構成された @Field アノテーションが有効になりません。

エンティティクラス:

package cn.aopmin.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(indexName = "product", // 索引库名称
        shards = 1, // 主分片个数
        replicas = 1 // 备份分片个数
)
public class Product {
    
    

    /**
     * 主键id
     */
    // ES主键id
    @Id
    private Long id;

    /**
     * 商品名称
     */
    // ES普通字段
    @Field(type = FieldType.Text, // 字段类型
            analyzer = "ik_max_word", // 建立索引用的分词器
            searchAnalyzer = "ik_smart", //查询时用的分词器
            store = true // 是否额外存储一份 (ES默认把文档字段存储在源文档_source中)
    )
    private String productName;

    /**
     * 库存数量
     */
    @Field(type = FieldType.Integer, store = true)
    private Integer store;

    /**
     * 价格
     */
    @Field(type = FieldType.Double, store = true)
    private Double price;


    /**
     * 分类
     */
    @Field(type = FieldType.Keyword) //不分词
    private String category;
}

インデックス ライブラリを確認すると、動的マッピングが使用されており、静的マッピングは使用されていないことがわかります。

ここに画像の説明を挿入します

解決策: データを挿入するときに、事前にインデックス ライブラリとマッピングを作成します。

ここに画像の説明を挿入しますここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_46921028/article/details/131927454