繁体   English   中英

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

[英]Indexing in Hibernate Search not working properly

我正在尝试将Hibernate Search集成到我的后端,但是我无法使其按预期运行。

我的目的是获取以下所有model.Course只标记“Java”的元组:

在此处输入图片说明 我的模特课程表

目前,我只得到了model.Courseid = 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, ...) {
    /*...*/
}

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

这是我的索引状态的屏幕截图(使用Luke)

我不知道如何解决这类问题。 我在听建议。 细节:

  • 我正在为SessionFactory使用单例(我不是在编辑之前)
  • 我正在使用org.hibernate:hibernate-search-orm:5.8.2.Final
  • 我正在使用HSQLdb 2.4.0
  • 休眠的其余部分运行正常(CRUD操作)

看起来像是一个分析问题,例如,分析人员选择不将字段拆分为令牌。

有点奇怪的是,默认分析器(StandardAnalyzer)将字段拆分为令牌,因此它应该开箱即用。

您是否设置了其他默认分析器(例如KeywordAnalyzer)?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM