Elasticsearch-like查找

本文介绍了如何在SQL和Elasticsearch中使用模糊查询技术,包括通过LIKE语句在SQL中进行模糊匹配,以及在Elasticsearch中利用正则表达式进行更高级的模糊搜索。这些技巧对于快速定位包含特定子串的数据记录非常有用。

1.基本需求

模糊查询,级别数据如下

表明(tb_name)

idname
1张小宝
2王小美

2.sql 的模糊查询

select name from tb_name name like '%小%'

3.es 的查询

是用正则表达式

{
              "wildcard" : {
                "name" : {
                  "value" : "*小*",
                  "boost" : 1.0
                }
              }
            }
appQuery.must(QueryBuilders.wildcardQuery("name", "*小*"));

 

### 如何在 Elasticsearch 中实现类似于 SQL 的模糊查询like)功能 #### 使用 `wildcard` 查询 为了实现在Elasticsearch中类似SQL `%关键字%`的单纯模糊查询,可以采用`wildcard`查询。这种查询允许指定通配符模式来进行前缀、后缀以及中间部分的匹配[^1]。 ```json GET /_search { "query": { "wildcard": { "field_name": "*AAA*" } } } ``` 此方法适用于不需要分词器处理的情况,即希望保持搜索项作为一个整体进行匹配而不是拆分成单独字符或词语的情形下非常有用。 #### 利用 nGram 分析器 另一种方案是通过配置自定义分析链,在索引阶段应用nGram过滤器创建子字符串片段。当执行查询操作时,则能够高效定位含有特定连续字符序列的文档[^3]。 首先设置映射: ```json PUT my_index { "settings": { "analysis": { "analyzer": { "ngram_analyzer": { "type": "custom", "tokenizer": "standard", "filter": ["lowercase", "ngram_filter"] } }, "filter": { "ngram_filter": { "type": "ngram", "min_gram": 2, "max_gram": 50 } } } }, "mappings": { "_doc": { "properties": { "content_field": { "type": "text", "analyzer": "ngram_analyzer", "search_analyzer": "standard" } } } } } ``` 接着就可以像平常一样使用match或者term查询了,因为底层已经由nGram负责构建必要的索引来支持灵活的部分匹配需求。 #### Phrase Matching 方案 对于某些场景而言,如果仅仅是想要确保几个单词按照顺序出现而不想启用复杂的全文本解析过程的话,那么phrase matching是一个不错的选择。它能保证词条间的相对位置不变从而达到近似于“精确短语”的效果。 ```json GET /my_index/_search { "query": { "match_phrase": { "content_field": "AAA" } } } ``` 以上三种方式都可以满足不同业务逻辑下的模糊查找需求,具体选用哪一种取决于实际应用场景的要求以及性能考量因素。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值