我正在尝试将Hibernate Search集成到我的后端,但我无法按照我的意愿使其工作。
我的目的是仅使用令牌“java”检索以下所有model.Course
元组:
目前,我只获得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
答案 0 :(得分:0)
它看起来像一个分析问题,例如分析仪选择不在标记中分割字段。
有点奇怪的是,默认分析器(StandardAnalyzer)将字段分成标记,因此它应该可以开箱即用。
您是否设置了不同的默认分析器(例如KeywordAnalyzer)?