【问题标题】:How to display hibernate search results using QueryBuilder, Lucene Query & FullTextQuery?如何使用 QueryBuilder、Lucene Query 和 FullTextQuery 显示休眠搜索结果?
【发布时间】:2016-07-19 06:08:02
【问题描述】:

如何仅使用带有 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 - 实体类:

@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 + " ]";
}

}

当我运行上面的程序时,它没有返回大小。但是当我使用 Namedquery 和 Native Query 返回时,它执行得很好。即使我删除代码中的排序语句,它也不会返回任何内容。谁能指导我问题出在哪里?

【问题讨论】:

  • 您是否执行了索引?
  • 不完全是。 Entity中提到过。

标签: java mysql hibernate lucene hibernate-search


【解决方案1】:

试试这个:

FullTextEntityManager ftem=Search.getFullTextEntityManager(entityManager);
ftem.createIndexer().startAndWait();

启动针对所有带有@Indexed 注释的实体的索引

【讨论】:

  • 谢谢。这有很大帮助。我没有运行上面的语句。这会在项目中创建几个文件,例如 _0.fdt、_0.fdx、_0.fnm、_0.frq、_0.nrm、_0.prx、_0.tii、_0.tis、segments.gen、segments_2 和 write.lock。这些在 Notepad++ 中都不可读。
猜你喜欢
  • 2017-06-07
  • 2021-07-28
  • 2012-08-17
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多