Hibernate使用Lucene查询查询名字和姓氏

时间:2017-12-01 22:12:14

标签: lucene hibernate-search

我用短语,通配符和关键字查询尝试了这一点,但没有什么真正有效。

  ...    
    @Field(name = "firstLastName", index = org.hibernate.search.annotations.Index.YES, analyze = Analyze.NO, store = Store.NO)
    public String getFirstLastName() {
        return this.firstLastName;
    }
...

现在我想查询此字段并返回正确的结果,如果用户键入John Smith,Smith John或Smith Jo *或John Smi * ....

junction = junction.should(qb.keyword().wildcard().onField("firstLastName")
                            .matching("John Smith*").createQuery());

如果我在搜索关键字时只搜索史密斯或约翰,我就会受到欢迎。我没有分析这个领域,因为我认为我不需要,但是我尝试了两种方式都没有成功......

1 个答案:

答案 0 :(得分:1)

这里有几个问题:

  • 您需要使用分析器,只需将字符串拆分为空格。定义分析仪并将其分配给您的领域。
  • 如果要分析字符串,则不能使用通配符查询:不分析通配符查询。您应该使用EdgeNGramFilter。

对一个非常相似的问题的答案可能有所帮助:Hibernate Search: How to use wildcards correctly?