2016-07-28 76 views
0

早些时候我们搜索像“David Azrael父亲”。它将所有结果名称返回为Father或David或Azrael。如何使用Hibernate Lucene搜索一个完整的短语和单个词条?

以下是以图片代码:

String[] FIELDS = { "id", "person.firstName", "person.middleName", "person.lastName" }; 
for (String field : FIELDS) { 
      for (String match : pattern) {  
        bool.should(qb.keyword().wildcard().onField(field).matching(match).createQuery()); 
      } 
     } 
     query = bool.createQuery(); 

除了上面的情况,现在有额外的要求,如果最终用户想要搜索“父亲大卫死神”;他只应得到一个结果。

意思是如果我们搜索“David Azrael父亲”;那么只有有这个名字的结果才会出现,但如果用户搜索“Father Azrael”,那么它应该像现在一样工作。

那么需要用上面的代码来实现相同的变化呢?

回答

0

您可以使用短语查询,如在文档的section 5.1.2.4

bool.should(qb 
    .phrase() 
    .onField(field) 
    .sentence("Father David Azrael") 
    .createQuery()); 

我不知道你的意思怎么样“父亲大卫死神”正在接受治疗不同于“父亲死神”,所以我不会评论这一部分,但这就是你如何创建一个词组查询。您可以将短语与现有的通配符查询结合使用,方法是将两者都添加到布尔查询中以获得两组结果,而短语匹配通常会得到最高分数。或者,您可以先运行短语查询,并在没有结果时回退通配符查询。

+0

@femtoRogn 父亲是名,大卫是中间名,以色列是姓氏。在单一字段,如名字;我们能够在上面跑步吗?让我试试。另外 “父亲Azrael”是指如果名字或姓氏有父亲和以色列都 – fatherazrael

相关问题