我已经在我的JSP项目中实现了hibernateLucene搜索。我可以搜索contact_name,contact_email(一对多)等,结果它将成功返回与搜索关键字匹配的联系人列表。但是 我的问题是 我想知道“匹配项” 在哪个 字段(columnn_name) 中找到。有什么办法来获取匹配的字段名和结果。
这就是我编写搜索查询并获得结果的方式
List<Contact> searchResultContact = new ArrayList<Contact>(); FullTextSession fullTextSession = Search.getFullTextSession(session); QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Contact.class).get(); org.apache.lucene.search.Query query1 = qb.phrase().withSlop(2) .onField("firstName") .andField("emailDetails.email_id") .boostedTo(5) .sentence(searchText.toLowerCase()).createQuery(); org.apache.lucene.search.Query query2 = qb.keyword() .onField("status") .matching("0") .createQuery(); org.apache.lucene.search.Query query = qb .bool() .must( query1 ) .must( query2) .createQuery(); org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery(query, Contact.class); searchResultContact = hibQuery.list();
我的联络人课程看起来像这样
@Entity @Indexed @Table(name = "contact") public class Contact { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Column(name = "firstName", nullable = false, length = 128) @Field(index = Index.YES, analyze = Analyze.YES, store = Store.NO, analyzer = @Analyzer(definition = "ngram")) private String firstName; @OneToMany(fetch = FetchType.EAGER) @Fetch(FetchMode.SELECT) @JoinColumn(name = "contact_id") @IndexedEmbedded List<EmailDetails> emailDetails; }
先感谢您..
有什么办法来获取匹配的字段名和结果。
在Hibernate Search中没有内置的方法可以做到这一点。可能有一种方法可以通过深入研究Lucene的内部原理来实现,但是除非您对性能的要求很高,否则我不建议您这样做。
不,实际上,最简单的方法是自己做。而不是运行单个查询,而是运行三个:
然后,第一个查询为您提供结果,第二个查询为您提供在“ firstName”字段上匹配的实体的列表,第三个查询为您提供在“ emailDetails.email_id”字段上匹配的实体的列表。
相关问题:https : //stackoverflow.com/a/47832433/6692043。