`

Elasticsearch 部分匹配 (二) - 通配符及正则表达式查询

阅读更多

原文链接:http://blog.csdn.net/dm_vincent/article/details/42024799

 

通配符和正则表达式查询

 

wildcard查询和prefix查询类似,也是一个基于词条的低级别查询。但是它能够让你指定一个模式(Pattern),而不是一个前缀(Prefix)。它使用标准的shell通配符:?用来匹配任意字符,*用来匹配零个或者多个字符。

以下查询能够匹配包含W1F 7HW和W2F 8HW的文档:

GET /my_index/address/_search
{
    "query": {
        "wildcard": {
            "postcode": "W?F*HW" 
        }
    }
}

假设现在你想匹配在W地域(Area)的所有邮政编码。使用前缀匹配时,以WC开头的邮政编码也会被匹配,在使用通配符查询时也会遇到类似的问题。我们只想匹配以W开头,紧跟着数字的邮政编码。使用regexp查询能够让你写下更复杂的模式:

GET /my_index/address/_search
{
    "query": {
        "regexp": {
            "postcode": "W[0-9].+" 
        }
    }
}

这个正则表达式的规定了词条需要以W开头,紧跟着一个0到9的数字,然后是一个或者多个其它字符。

wildcard和regexp查询的工作方式和prefix查询完全一样。它们也需要遍历倒排索引中的词条列表来找到所有的匹配词条,然后逐个词条地收集对应的文档ID。它们和prefix查询的唯一区别在于它们能够支持更加复杂的模式。

这也意味着使用它们存在相同的风险。对一个含有很多不同词条的字段运行这类查询是非常消耗资源的。避免使用一个以通配符开头的模式(比如,*foo或者正则表达式: .*foo)。

尽管对于前缀匹配,可以在索引期间准备你的数据让它更加高效,通配符和正则表达式匹配只能在查询期间被完成。虽然使用场景有限,但是这些查询也有它们的用武之地。

注意

prefix,wildcard以及regexp查询基于词条进行操作。如果你在一个analyzed字段上使用了它们,它们会检查字段中的每个词条,而不是整个字段。

比如,假设我们的title字段中含有"Quick brown fox",它会产生词条quick,brown和fox。

这个查询能够匹配:

{ "regexp": { "title": "br.*" }}

而不会匹配:

{ "regexp": { "title": "Qu.*" }} 
{ "regexp": { "title": "quick br*" }}

 

分享到:
评论

相关推荐

    正则表达式手册.pdf

    ### 正则表达式基础知识及应用 #### 一、引言 正则表达式是一种强大的文本处理工具,它能够帮助我们高效地完成对文本的搜索、替换和提取工作。正则表达式的应用非常广泛,从简单的字符串匹配到复杂的文本解析都能...

    正则表达式速查表

    ### 正则表达式速查表详解 #### 1. 特殊字符 - **`\`**:转义字符,用于标识接下来的字符是特殊字符还是原义字符,或者指向后引用、八进制转义符。例如: - `n` 匹配字符 `n`。 - `\n` 匹配一个换行符。 - `\\`...

    探索未知:在Elasticsearch中执行模糊查询

    正则表达式查询使用正则表达式进行匹配,提供了高度灵活的匹配能力。例如: ```json GET /my_index/_search { "query": { "regexp": { "my_field": { "value": "a.n" } } } } ``` 在这个示例中: - `regexp...

    G04-杨樾人-基于Elasticsearch集群的数据查询优化1

    - 尽量避免使用通配符和正则表达式查询,它们可能导致全索引扫描,降低性能。 - 使用`match_phrase`或`match_phrase_prefix`进行短语匹配,提高查询效率。 - 利用`bool`查询构造复杂的查询条件,通过`should`、`...

    kibana-4.6.1 搭配elasticsearch2.4.4使用

    Kibana支持丰富的查询语法,如布尔运算符、通配符和正则表达式。 - 创建视觉对象:在Visualize页面,你可以利用各种图表类型(如线图、柱状图、饼图等)创建数据可视化。选择合适的数据源,配置X轴、Y轴以及其他...

    Mastering ElasticSearch 2nd Edition

    全文搜索支持包括短语搜索、模糊搜索、通配符搜索、正则表达式搜索和范围搜索等。这些查询可以应用于多种数据类型,如字符串、数字和日期等。 复合查询则允许用户将多个查询组合成单个查询上下文,以执行更复杂的...

    ES调优+源码+pdf.rar

    - **避免使用通配符和正则表达式**:它们可能导致全表扫描,影响性能。 - **利用过滤器缓存**:频繁使用的过滤条件可以缓存,提高查询速度。 #### 3.2 使用聚合 - **优化聚合操作**:避免在大基数字段上执行聚合,...

    SQL数据库模糊查询内容语句

    在MySQL中,RLIKE和REGEXP支持更复杂的正则表达式模糊查询。例如,查找所有包含连续重复字符的名字: ```sql SELECT * FROM 表名 WHERE name RLIKE '(.)\1+'; ``` 5. **NOT LIKE** 如果你想排除某些特定模式,...

    lucene jar包

    - **模糊搜索**:支持通配符和正则表达式查询,提供近似搜索功能。 - **高亮显示**:可以突出显示查询结果中的匹配部分,提升用户体验。 - **过滤器和切面搜索**:Filter用于在搜索结果中进一步筛选,而...

    基于Java和数据库的图片文字模糊查询,毕业设计的一部分.zip

    - **全文搜索引擎**:为了提高查询效率,项目可能还涉及到全文搜索引擎,如Lucene或Elasticsearch,它们可以快速索引和搜索文本内容。 5. **项目结构**: - **版本控制**:文件名中包含的"furrySearch-master...

    kibana-4.6.1-windows-x86

    在4.6.1版本中,Kibana改进了搜索和过滤机制,支持布尔逻辑操作,如AND、OR和NOT,以及通配符和正则表达式搜索,使得数据筛选更加灵活和精确。 4. 仪表板与视觉工作台: Kibana的仪表板允许用户将多个可视化组件...

    文本型文件内容搜索

    3. **模糊匹配**:支持通配符或正则表达式,增加搜索的灵活性。 4. **多线程/并行处理**:利用多核CPU的并行计算能力,加快文件扫描速度。 在实际操作中,用户可能需要搜索特定的短语或模式,而不仅仅是单个单词。...

    Lucene api

    - **模糊搜索**: 支持通配符和正则表达式查询,如“*”代表任意字符,"??"代表任意单个字符。 - **短语搜索**: 可以搜索连续出现的词组,如“大数据分析”。 - **评分和排序**: 结果根据相关性评分排序,评分越高...

    lucene总结

    例如,你可以使用AND、OR、NOT等操作符组合多个查询条件,或者使用通配符和正则表达式进行模糊匹配。 此外,Lucene还提供了缓存机制以提高性能,比如字段值缓存和DocValues缓存。为了应对大数据量的索引,Lucene...

    Lucene搜索引擎开发进阶实战----高清版

    6. **多字段搜索**:学习如何在多个字段上进行联合搜索,以及如何处理复杂的查询需求,如范围查询、通配符查询和正则表达式查询。 7. **分布式搜索**:随着数据量的增大,单机搜索可能无法满足需求,因此需要了解...

    lucene中文资料

    3. **复杂查询语法**:支持复杂的查询表达式,如通配符查询、正则表达式查询、范围查询等。 4. **分布式搜索**:Solr 和 Elasticsearch 是基于 Lucene 构建的分布式搜索引擎,提供更高级别的集群管理和性能优化。 ...

    lucene高级搜索进阶项目_02

    除了基本的单词查询,Lucene还支持更复杂的查询类型,如PrefixQuery(前缀查询)、WildcardQuery(通配符查询)、FuzzyQuery(模糊查询)、RegexQuery(正则表达式查询)等。这些查询类型极大地扩展了搜索能力,允许...

Global site tag (gtag.js) - Google Analytics