Spring Data ElasticSearch字符相似度查询

作者: 李剑 分类: Spring 发布时间: 2018-12-20 09:08

在使用ElasticSearch时,有时会遇到下面类似的业务场景:检索与给定手机号相似的人,例如给定手机号18000000000,系统需检索出诸如手机号为18000000001,18000000002,18100000001等等相似的人的信息。下面我们使用ElasticSearchFuzzy Query来实现手机号的相似度检索。本例使用的spring boot版本为2.0.6.RELEASE,spring-boot-starter-data-jest版本为3.1.2.RELEASE

1.前期准备工作

  • Entity:
@Document(indexName = "person", type = "person", shards = 3, replicas = 1)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    @Id
    private String phoneNum;
    private String name;
    private String gender;
    private Integer age;
}

  • Repository:
public interface PersonRepository extends ElasticsearchRepository<Person, Long> {

}

2.构造Fuzzy Query查询条件

QueryBuilder queryCondition = QueryBuilders.fuzzyQuery("phoneNum", fuzzyPhoneNum).fuzziness(Fuzziness.AUTO);
personRepository.search(queryCondition);

说明:

  • QueryBuilders.fuzzyQuery('字段名', 字段值)
  • fuzziness()方法以编辑距离为入参,取值有四种:0,1,2,’AUTO’

源码地址:https://github.com/a479159321/elasticsearch-fuzzy-query

发表评论

电子邮件地址不会被公开。 必填项已用*标注