[英]Indexing in Hibernate Search not working properly
我正在尝试将Hibernate Search集成到我的后端,但是我无法使其按预期运行。
我的目的是获取以下所有model.Course
只标记“Java”的元组:
目前,我只得到了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, ...) {
/*...*/
}
重要编辑:我最初认为这是查询问题,但实际上是索引问题。
我不知道如何解决这类问题。 我在听建议。 细节:
SessionFactory
使用单例(我不是在编辑之前) org.hibernate:hibernate-search-orm:5.8.2.Final
看起来像是一个分析问题,例如,分析人员选择不将字段拆分为令牌。
有点奇怪的是,默认分析器(StandardAnalyzer)将字段拆分为令牌,因此它应该开箱即用。
您是否设置了其他默认分析器(例如KeywordAnalyzer)?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.