ElasticSearch 模糊匹配查询

目前的需求输入:王 女 济南 20-30

  • 能够查询以王开头的人的名字
  • 性别为女性
  • 地址为济南
  • *年龄为20-30

分析及查询

针对姓名,可直接在规范中定义好,王? 王* 王??,可直接搜索是否存在字符串;
针对性别,因只有男女,可直接进行匹配
地址为汉字,可作为if条件最后的一节,放到查询语句中;
年龄需要进行判断,存在数字的,或者存在“-”符号的,要进行日期加减,找出1987-1997的出生日期的人

这里写代码片

{ "from": 0, "query": { "bool": { "minimum_should_match": 1, "must": [ { "match": { "XB": "2 " } }, { "wildcard": { "XM": "王*" } } ], "should": [ { "range": { "CSRQ": { "gte": "2010-09-01", "lte": "2014-09-01" } } } ] } }, "size": 10 }

### Elasticsearch 实现模糊匹配方法 在Elasticsearch中,模糊查询是一种近似匹配的搜索方式,用于查找与搜索词项相似但不完全相等的文档。这种查询基于编辑距离(Levenshtein 距离)来计算两个词项之间的差异[^2]。 #### 使用 `match` 查询实现模糊匹配 可以通过设置 `fuzziness` 参数来进行模糊匹配: ```json GET /index_name/_search { "query": { "match": { "field_name": { "query": "surprize", "fuzziness": "AUTO" } } } } ``` 此配置会自动调整最大允许的编辑距离,使得查询更加灵活和高效[^5]。 #### 利用 Java 进行模糊查询 为了方便开发者操作,可以借助于官方提供的Java客户端库。首先需确保项目已引入相应的Maven依赖[^4]: ```xml <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.10.2</version> </dependency> ``` 接着编写一段简单的代码片段展示如何执行带有模糊性的全文检索请求: ```java import org.apache.http.HttpHost; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.index.query.QueryBuilders; public class ElasticSearchExample { public static void main(String[] args) throws Exception { RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); SearchRequest searchRequest = new SearchRequest("your_index"); searchRequest.source().query(QueryBuilders.matchQuery("title", "surprize").fuzziness("AUTO")); SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT); System.out.println(response.toString()); client.close(); } } ``` 这段程序展示了怎样构建并发送一个包含模糊参数(`fuzziness`)在内的`match`类型的查询语句给定索引中的特定字段进行搜索。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值