FuzzyQuery查询

FuzzyQuery查询(可以简单地识别两个相近的词语)

 

1.在FuzzyQuery类定义中定义了两个成员变量:

private float minimumSimilarity;

private int prefixLength;

minimumSimilarity是最小相似度,取值范围为0.0~1.0,包含0.0但不包含1.0,默认值为0.5。prefixLength是前缀长度,默认为0。

  minimumSimilarity表示是最小相似度,可以通过指定一个相似度来决定模糊匹配的严格程度。默认为0.5,当这个值越小,通过模糊查找出的文档的匹配程度就越低,文档的数量也就越多;当这个值越大,说明要匹配程度更大,匹配的文档数也就越少,当相似度设置为1,那么就退化为TermQuery查询,所以当这个值>=1或<0会抛出IllegalArgumentException异常。

另外一个参数prefixLength表示在进行模糊匹配的时候,要有多少个前缀字母必须完全匹配。例如当该值设置为“1”,则表示所有此条只有第一个字母与检索关键字相符时,才会被集合选中。

2.构造方法

使用FuzzyQuery要从的构造方法开始,该类给出3种构造方式:

第一种:

public FuzzyQuery(Term term, float minimumSimilarity, int prefixLength) throws IllegalArgumentException {

    super(term);

    if (minimumSimilarity >= 1.0f)

      throw new IllegalArgumentException("minimumSimilarity >= 1");

    else if (minimumSimilarity < 0.0f)

      throw new IllegalArgumentException("minimumSimilarity < 0");

    if (prefixLength < 0)

      throw new IllegalArgumentException("prefixLength < 0");

   

    this.minimumSimilarity = minimumSimilarity;

    this.prefixLength = prefixLength;

}

第二种:

public FuzzyQuery(Term term, float minimumSimilarity) throws IllegalArgumentException {

      this(term, minimumSimilarity, defaultPrefixLength);

}

第三种:

public FuzzyQuery(Term term) {

    this(term, defaultMinSimilarity, defaultPrefixLength);

}

3.实例

详见 http://www.haogongju.net/art/865455
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RestHighLevelClient 是 Elasticsearch 官方提供的 Java 客户端,可以通过它来实现分词、模糊、相似度查询。其中,分词查询可以使用 match 查询,模糊查询可以使用 fuzzy 查询相似度查询可以使用 more_like_this 查询。 例如,使用 match 查询实现分词查询: ```java SearchRequest searchRequest = new SearchRequest("index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("field", "query"); searchSourceBuilder.query(matchQueryBuilder); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); ``` 使用 fuzzy 查询实现模糊查询: ```java SearchRequest searchRequest = new SearchRequest("index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery("field", "query"); searchSourceBuilder.query(fuzzyQueryBuilder); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); ``` 使用 more_like_this 查询实现相似度查询: ```java SearchRequest searchRequest = new SearchRequest("index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); MoreLikeThisQueryBuilder moreLikeThisQueryBuilder = QueryBuilders.moreLikeThisQuery(new String[]{"field1", "field2"}, new String[]{"like_text1", "like_text2"}, null); searchSourceBuilder.query(moreLikeThisQueryBuilder); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值