如何使用 QueryBuilder、Lucene Query 和 FullTextQuery 显示休眠搜索结果?
How to display hibernate search results using QueryBuilder, Lucene Query & FullTextQuery?
如何使用仅带有 order 子句的 FullTextEntity Manager 显示结果。
EntityManager em = factory.createEntityManager();
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
QueryBuilder qb = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder().forEntity( Desh.class ).get();
org.apache.lucene.search.Query query = new org.apache.lucene.search.MatchAllDocsQuery();
//Also used qb.all().getQuery(); but no results
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(query, Desh.class);
System.out.println(""+ query);
System.out.println(""+ query.toString());
fullTextQuery.setSort(new Sort(new SortField("DeshName_for_sort", SortField.STRING, true)));
//Also used DESH but no results
fullTextQuery.setFirstResult(0).setMaxResults(60);
System.out.println("" + fullTextQuery);
System.out.println("" + fullTextQuery.getParameters());
int size = fullTextQuery.getResultSize();
List<Desh> result = fullTextQuery.getResultList();
System.out.println("Size e -> "+ size);
System.out.println("Size e -> "+ result.size());
for (Deshuser : result) {
System.out.println("Id: " + user.getId());
System.out.println("Person Id:" + user.getName());
}
Desh - 实体 Class:
@Entity
@Table(name = "DESH")
@XmlRootElement
@Indexed
public class Desh implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ID")
private Long id;
@Fields({ @Field(index = Index.YES, store = Store.NO), @Field(name = "DeshName_for_sort", index = Index.YES, analyze = Analyze.NO) })
@Column(name = "NAME", length = 100)
private String name;
public Desh () {
}
public Desh (Long id) {
this.id = id;
}
public Desh (Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "in.hibprac.hibernatepractice.Desh[ id=" + id + " ]";
}
}
当我 运行 以上程序时,它 return 没有大小。但是当我 return 使用 Namedquery 和 Native Query 时,它执行得很好。即使我删除了代码中的排序语句,它 return 也没什么。谁能指导我问题出在哪里?
试试这个:
FullTextEntityManager ftem=Search.getFullTextEntityManager(entityManager);
ftem.createIndexer().startAndWait();
针对所有用 @Indexed
注释的实体启动索引
如何使用仅带有 order 子句的 FullTextEntity Manager 显示结果。
EntityManager em = factory.createEntityManager();
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
QueryBuilder qb = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder().forEntity( Desh.class ).get();
org.apache.lucene.search.Query query = new org.apache.lucene.search.MatchAllDocsQuery();
//Also used qb.all().getQuery(); but no results
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(query, Desh.class);
System.out.println(""+ query);
System.out.println(""+ query.toString());
fullTextQuery.setSort(new Sort(new SortField("DeshName_for_sort", SortField.STRING, true)));
//Also used DESH but no results
fullTextQuery.setFirstResult(0).setMaxResults(60);
System.out.println("" + fullTextQuery);
System.out.println("" + fullTextQuery.getParameters());
int size = fullTextQuery.getResultSize();
List<Desh> result = fullTextQuery.getResultList();
System.out.println("Size e -> "+ size);
System.out.println("Size e -> "+ result.size());
for (Deshuser : result) {
System.out.println("Id: " + user.getId());
System.out.println("Person Id:" + user.getName());
}
Desh - 实体 Class:
@Entity
@Table(name = "DESH")
@XmlRootElement
@Indexed
public class Desh implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ID")
private Long id;
@Fields({ @Field(index = Index.YES, store = Store.NO), @Field(name = "DeshName_for_sort", index = Index.YES, analyze = Analyze.NO) })
@Column(name = "NAME", length = 100)
private String name;
public Desh () {
}
public Desh (Long id) {
this.id = id;
}
public Desh (Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "in.hibprac.hibernatepractice.Desh[ id=" + id + " ]";
}
}
当我 运行 以上程序时,它 return 没有大小。但是当我 return 使用 Namedquery 和 Native Query 时,它执行得很好。即使我删除了代码中的排序语句,它 return 也没什么。谁能指导我问题出在哪里?
试试这个:
FullTextEntityManager ftem=Search.getFullTextEntityManager(entityManager);
ftem.createIndexer().startAndWait();
针对所有用 @Indexed