Dan*_*ush 3 java lucene search hibernate hibernate-search
我没有尝试这件事.我的要求是按照他们的名字搜索记录
以下是我的相关课程:
RecordFolderAnalysis.java
@Indexed
public class RecordFolderAnalysis extends AuditableEntity implements Serializable {
@ManyToOne
@JoinColumn(name = "arrivalId", nullable = false)
@ContainedIn
private RecordFolderArrival recordFolderArrival;
}
Run Code Online (Sandbox Code Playgroud)
RecordFolderArrival.java
@Indexed
public class RecordFolderArrival extends BaseEntity implements Serializable
{
@Column(name="recordName", unique = true, nullable = false)
@Field(index = Index.UN_TOKENIZED)
private String recordName;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "recordFolderArrival", fetch = FetchType.LAZY, targetEntity = RecordFolderAnalysis.class)
@IndexedEmbedded
private List<RecordFolderAnalysis> recordFolderAnalysis=new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)
Follwing是我的DAO类方法:
@Override
public List<T> search(final String queryString, final String... fields) {
List searchResult = hibernateTemplate.executeFind(new HibernateCallback<Object>() {
org.hibernate.Query fullTextQuery1 = null;
@Override
public Object doInHibernate(Session session) throws HibernateException, SQLException {
try {
System.out.println("in do in hibernate");
FullTextSession fullTextSession = Search.getFullTextSession(session);
Transaction tx = fullTextSession.beginTransaction();
QueryBuilder builder=fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(persistentClass).get();
Query luceneQuery=builder.keyword().onField("recordFolderArrival.recordName").matching(queryString).createQuery();
fullTextQuery1 = fullTextSession.createFullTextQuery(luceneQuery);
for (Object o : fullTextQuery1.list()) {
System.out.println("Values" + o);
}
} catch (Exception e) {
e.printStackTrace();
}
return fullTextQuery1.list();
}
});
return searchResult;
}
Run Code Online (Sandbox Code Playgroud)
所以我通过将字段名称设置为recordFolderArrival.recordName来按Record-Name搜索.但这是一个例外
recordFolderArrival.recordName字段在RecordFolderAnalysis中不存在.
我是Hibernate Search的新手,所以如果有人能帮我解决这个问题.谢谢,不要担心@Entity和其他注释,他们被放在他们必须是它的地方我只是没有将它们包含在片段中.
好的,我自己找到了答案我将注释方面@IndexEmbedded改为其他类,@ContainedIn所以现在我的字段是
@IndexedEmbedded
private RecordFolderArrival recordFolderArrival;
Run Code Online (Sandbox Code Playgroud)
和
@ContainedIn
private List<RecordFolderAnalysis> recordFolderAnalysis=new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
问题已解决,因为@IndexedEmbedded您可以在查询中导航到该属性; 我发布了答案,因为它可能对其他人有帮助.
| 归档时间: |
|
| 查看次数: |
2481 次 |
| 最近记录: |