我在应用程序中实现搜索功能,在其中搜索数据库中的记录。我为此使用ElasticSearch,我知道我必须保持数据库和索引同步。我将在应用程序层进行处理。
我的问题更多是关于从我的J2EE 7应用程序查询ElasticSearch。我可以从查询中获取JsonObject或JsonArray,然后使用Gson库及其JsonObject和JsonArray类“手动解析”它,但效率不高。
根据我的阅读,使用GSON解析的最佳实践是拥有一个与您的Json对象具有相同结构的POJO。我可以这样做,但是此POJO与我的JPA实体非常相似,因此我将在两个地方拥有相同的信息,这将使维护变得更加困难。我一直无法使它无缝运行,但是我想尝试另一种方法。
所以我的问题是,是否可以将json对象映射到JPA实体,更重要的是,这是一种好习惯吗?
这是我的JSON(变量名称可以更改,我知道它们现在不匹配):
{
"vendorEcommerce": 1,
"Categories": {
"Sub": [
4,
8,
5
],
"Main": [
1,
2
]
},
"Countries": 1,
"vendorFeatured": 1,
"vendorWebsite": "www.johndoesserviceprovider.com",
"vendorEmail": "johndoe@gmail.com",
"vendorCreated": "2015-02-25T17:00:13.000Z",
"vendorName": "John Doe's Service Provider",
"vendorLocation": 1,
"vendorRating": 1,
"States": [
1,
2
],
"vendorUpdated": "2015-02-25T17:00:13.000Z",
"vendorPhone": "+11235551234",
"vendorDescription": "This is John Doe's Service Provider Description",
"vendorPromotion": "Oh yeah",
"vendorPrice": 3
}
这是我的JPA实体(忽略了相关信息):
public class VendorEntity implements Serializable {
private static final long serialVersionUID = 1L;
private Integer vendorId;
private Date vendorCreated;
private Date vendorUpdated;
private String vendorName;
private String vendorWebsite;
private String vendorPhone;
private String vendorEmail;
private String vendorDescription;
private Boolean vendorEcommerce;
private Integer vendorRating;
private Integer vendorPrice;
private String vendorPromotion;
private Boolean vendorFeatured;
private LocationEntity location;
private List<ServiceCategoryEntity> categories;
private List<VendorCoverageEntity> coverages;
}
最佳答案
您可以将Spring Data Elasticsearch与JPA一起使用。
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ElasticsearchCrudRepository.class))
@EnableElasticsearchRepositories(includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ElasticsearchCrudRepository.class))
public class DataConfiguration {
...
}
实体示例:
@Entity
@Table(name="learn_author")
@Document(indexName = "blogging", type = "author", shards = 1, replicas = 0)
public class Author implements Serializable {
@org.springframework.data.annotation.Id
@Id
@GeneratedValue(strategy= GenerationType.SEQUENCE)
@Column(name="id")
private Long id;
@Column(name="username")
private String username;
@Field(type = FieldType.String,
searchAnalyzer = "standard",
indexAnalyzer = "standard",
store = true)
@Column(name="fullname")
private String fullname;
...
}
click here的完整示例
关于json - 使用JEST将ElasticSearch结果映射到JPA实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28878394/