一日一技:在ES中如何使用通配符搜索keyword字段

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 一日一技:在ES中如何使用通配符搜索keyword字段

摄影:产品经理游玩:kingname & 产品经理

我们知道,在 ES 中,字段类型如果是keyword,那么在搜索的时候一般只能整体搜索,不支持搜索部分内容。例如,有一个字段叫做{"name": "我是青南"},当我使用{"match": {"name": "我是青南"}}的时候可以正常搜索出来。但是当我使用{"match": {"name": "青南"}}时,就什么都搜索不到。

但是,ES 支持使用通配符来进行搜索,于是我们可以把 DSL 搜索语句构造为:

{"wildcard": {"name": "*青南*"}}

这样就能正常搜索出结果了。

下面给出一段可以正常使用的elasticsearch-py的代码,用于编写 DSL 语句在 Elasticsearch 中搜索数据:

from elasticsearch import Elasticsearch, helpers
es = Elasticsearch([{'host': 'xx.xx.xx.xx', 'port': 1234}], timeout=30)
body = {
        "query": {
            "bool": {
                "filter": [
                    {
                      "range": {
                          "ts": {
                              "gte": '2019-11-01 00:00:00',
                              "lt": '2019-11-29 00:00:00'
                          }
                      },
                    }
                ],
                'must': [
                    {'match_phrase': {'source': 'baidu'}},
                    {'wildcard': {'title': '*青南*'}}
                ],
                "must_not": [
                     {'wildcard': {'title': {'value': '*大神*'}}}
                ],
            }
        },
        }
res = es.search(index='spider_data', body=body)
print(res)

这段代码的意思是说:

搜索 ts 时间范围在2019-11-01 00:00:002019-11-29 00:00:00,并且source字段为baidutitle字段包含青南但是不包含大神的数据。

但需要注意的是,使用通配符搜索,会对 ES 集群造成比较大的压力,特别是*号在前时,会有一定的性能损耗。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
存储 自然语言处理 Java
【elasticsearch】记录ES查询数据结果为空的问题(单个字搜索可以,词语搜索为空)
【elasticsearch】记录ES查询数据结果为空的问题(单个字搜索可以,词语搜索为空)
595 0
|
自然语言处理 索引
ES 匹配多个搜索条件和精确查询
ES 匹配多个搜索条件和精确查询
|
4月前
el-select 支持拼音搜索(含插件 pinyin-match 的使用)
el-select 支持拼音搜索(含插件 pinyin-match 的使用)
127 0
|
数据采集 开发者
|
搜索推荐
item_search - 按关键字搜索商品
一:便捷和快速。使用关键词检索可以很快地找到所需要的信息,只需要输入关键词,搜索引擎就会返回相关结果。 二:范围广。关键词检索可以搜索全平台范围内的网页和相关信息,用户能够快速获取信息。 三:检索准确度高。通过对关键词的筛选和搜索引擎的智能推荐,用户可以获得更加准确匹配的搜索结果。
|
XML JSON 缓存
|
SQL Java
白话Elasticsearch04- 结构化搜索之使用terms query搜索多个值以及多值搜索结果优化
白话Elasticsearch04- 结构化搜索之使用terms query搜索多个值以及多值搜索结果优化
520 0
|
SQL 索引
白话Elasticsearch03- 结构化搜索之基于bool组合多个filter条件来搜索数据
白话Elasticsearch03- 结构化搜索之基于bool组合多个filter条件来搜索数据
297 0
|
JavaScript 前端开发 API
全文检索与高亮关键词匹配,用replace就够了
全文关键词检索高亮,这个在业务中常有的功能,比如浏览器默认就有个功能,关键词搜索就会匹配你检索的文字,并且会给你高亮,这是怎么实现的呢?
296 0
全文检索与高亮关键词匹配,用replace就够了