【问题标题】:Hibernate Search with Lucene Query for first and last name togetherHibernate Search with Lucene Query 一起查询名字和姓氏
【发布时间】:2017-12-01 22:12:13
【问题描述】:

我已经尝试过使用短语、通配符和关键字查询,但没有什么能真正完美地工作。

  ...    
    @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());

如果我只搜索给定关键字查询的 Smith 或 John,我会获得成功。我没有分析该领域,因为我认为我不需要,但我尝试了两种方式都没有成功......

【问题讨论】:

  • 我可以编写一个自定义分析器并这样做,但必须有别的东西。

标签: lucene hibernate-search


【解决方案1】:

这里有几个问题:

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

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

【讨论】:

  • 用于名称匹配的最佳分析器是什么?
猜你喜欢
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
相关资源
最近更新 更多