我正在使用Spring Boot 2.0.2和休眠搜索版本5.10.2。 我有以下课程作为我的实体:
@Entity
@Table(name = "CUSTOMERS")
@Indexed(index = "indexes_customer")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Beneficiary implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Basic
@Column(name = "CARD_NUMBER", length = 18)
@Field(analyze = Analyze.NO, store = Store.YES)
@SortableField
private String cardNumber;
@Basic
@Column(name = "FULL_NAME", length = 60)
@Field(analyze = Analyze.NO, store = Store.YES)
@SortableField
private String fullName;
//Getters & setters
卡数据以纯文本格式保存,但在向前台用户显示时被屏蔽。但是,我想在索引时掩盖卡号。 目前,我的索引如下:
{
"_index": "indexes_customer",
"_type": "mypackage.Customer",
"_id": "24",
"_version": 3,
"_score": 1,
"_source": {
"id": "24",
"name": "Customer Name",
"cardNumber": "1234567891011"
}
}
我希望它看起来像这样:
{
"_index": "indexes_customer",
"_type": "mypackage.Customer",
"_id": "24",
"_version": 3,
"_score": 1,
"_source": {
"id": "24",
"name": "Customer Name",
"cardNumber": "1234******1011"
}
}
谢谢
答案 0 :(得分:2)
您可以索引任何属性,包括@Transient属性;这些可能包含您的自定义代码。
@Basic
@Column(name = "CARD_NUMBER", length = 18)
String getCardNumber(){ ..}
@Field(analyze = Analyze.NO, store = Store.YES, name="card_number")
@SortableField
@javax.persistence.Transient
String getIndexedCardNumber() {
return maskCardNumber( getCardNumber() );
}
或者,您可以使用一些自定义的Analyzer
来实现此目的。但是,分析器方法会对查询结果产生一些影响-因此,这取决于您对查询的要求。
说实话,我很惊讶您完全想索引卡号。