【发布时间】:2018-02-01 07:44:01
【问题描述】:
我在我的 JSP 项目中实现了休眠 lucene 搜索。我可以搜索contact_name,contact_email(一对多)等,结果它会返回与搜索关键字匹配的联系人列表。但是我的问题是我想知道在哪个field(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 jsp lucene hibernate-search