Hibernate Search中的索引无法正常工作

时间:2018-05-04 19:42:18

标签: java hibernate indexing lucene hibernate-search

我正在尝试将Hibernate Search集成到我的后端,但我无法按照我的意愿使其工作。

我的目的是仅使用令牌“java”检索以下所有model.Course元组:

enter image description here My model.Course table

目前,我只获得model.Course id = 26。这意味着Lucene正在运行,但我不知道如何创建执行我想要的操作所需的查询。

这是我的CourseService代码:

private Session session;
private FullTextSession fts;

public CourseService(){
    SessionFactory sf = SessionFactoryManager.getInstance(); // Singleton
    this.session  = sf.openSession();
    this.fts = Search.getFullTextSession(this.session);
}

public List<Course> searchCourses(String token) {

    try {
        this.fts.createIndexer().startAndWait();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    Transaction tx = this.fts.beginTransaction();

    QueryBuilder queryBuilder = this.fts.getSearchFactory()
                                        .buildQueryBuilder()
                                        .forEntity(Course.class)
                                        .get();

    org.apache.lucene.search.Query query = queryBuilder.simpleQueryString()
                                                       .onField("description").andField("name")
                                                       .matching(token)
                                                       .createQuery();

    org.hibernate.query.Query hibQuery = fts.createFullTextQuery(query, Course.class);

    List result = hibQuery.getResultList();

    tx.commit();

    return result;
}

这是我的model.Course代码:

@Entity
@Indexed
@Inheritance(strategy = InheritanceType.JOINED)
public class Course implements Comparable<Course>{

@Id
@DocumentId
@GeneratedValue(strategy= GenerationType.AUTO)
private int id;

@Field (termVector = TermVector.YES)
private String name;

@Field
private String description;

/*...*/

 protected Course(String name, String description, ...) {
    /*...*/
}

重要编辑:我最初认为这是查询的问题,但它实际上是一个索引问题。

Here's a screenshot of my index's state (using Luke)

我不知道如何解决这类问题。我听到了建议。详情:

  • 我正在使用SessionFactory的单身人士(我之前没有编辑)
  • 我正在使用org.hibernate:hibernate-search-orm:5.8.2.Final
  • 我正在使用HSQLdb 2.4.0
  • 休眠的其余部分工作正常(CRUD操作)

1 个答案:

答案 0 :(得分:0)

它看起来像一个分析问题,例如分析仪选择不在标记中分割字段。

有点奇怪的是,默认分析器(StandardAnalyzer)将字段分成标记,因此它应该可以开箱即用。

您是否设置了不同的默认分析器(例如KeywordAnalyzer)?