`

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*" }}

 

分享到:
评论

相关推荐

    正则表达式元字符-详细说明.docx

    正则表达式元字符是正则表达式中最基本也是最重要的组成部分,它们是构成正则表达式的基本单元。元字符可以分为两大类:特殊元字符和普通元字符。特殊元字符是那些具有特殊含义的元字符,如:^、$、*、+、?、{n}、{n,...

    expresiones-regulares:正则表达式测试(Java)-正则表达式

    常用表达 正则表达式测试(Java)-正则表达式

    java正则表达式符号解释

    Java 正则表达式是指使用特殊字符来描述一个字符串的匹配规则,用于在字符串中搜索、验证和提取数据。下面是 Java 正则表达式符号的解释: 特殊字符 * `\` 将下一个字符标记为一个特殊字符、或一个原义字符、或一...

    正则表达式教程

    <br>3.7 后向引用 <br> 对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容存储。存储子匹配的缓冲区...

    很详细的正则表达式帮助文档

    正则表达式帮助文档正则表达式全部符号解释 字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\...

    java 正则表达式

    function IP2V(ip){re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式if(re.test(ip)){return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1}else{throw new Error(...

    dutch-postcode-regex:匹配荷兰邮政编码的正则表达式

    荷兰邮政编码正则表达式 匹配荷兰邮政编码的正则表达式安装 $ npm install dutch-postcode-regex用法 const dutchPostcodeRegex = require ( 'dutch-postcode-regex' ) ;// Contains a postcodedutchPostcodeRegex ...

    正则表达式全部符号解释

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和提取字符串中的特定模式。在编程语言中,正则表达式通常被用于处理字符串,如数据验证、文本搜索和替换等任务。以下是对正则表达式中常用符号的详细解释...

    正则表达式全部符号释义

    正则表达式(Regular Expression)是一种强大的文本处理工具,用于匹配、查找、替换和提取字符串中的特定模式。它由一系列的字符和特殊符号组成,每个符号都有特定的含义和功能。以下是对正则表达式中常用符号的详细...

    正则表达式符号说明文档

    正则表达式是指使用特殊字符和语法来搜索和匹配字符串的模式。它是一种非常强大的工具,广泛应用于字符串处理、文本搜索、数据提取等方面。本文档将对正则表达式的各种模式匹配符号和使用方法进行详细的说明。 特殊...

    正则表达式之 Unicode 匹配特殊字符

    最初我只是想记录下正则表达式用unicode的方式来匹配特殊字符,写着写着发现 v8 对 u 修饰符的不支持,又转而去研究怎么转换字符串到utf-16的格式,在研究怎么转换的过程中发现ES5的正则对 unicode 编码单元 > 0x...

    7.17.1系列Elasticsearch的elasticsearch-analysis-ik分词器

    中文分词:elasticsearch-analysis-ik 是基于最大正向匹配算法实现的中文分词器。它能够将中文文本按照合理的单词边界进行分割,并提供高质量的分词结果。 词库扩展性:elasticsearch-analysis-ik 采用了可扩展的...

    ES2015 正则表达式新增特性

    ES2015 正则表达式新增特性: 在原来正则表达式基础上,ES2015增强了对四字节unicode字符的支持等功能。 更多正则表达式内容可以参阅正则表达式教程板块。 一.RegExp构造函数的使用: 在ES2015之前,使用RegExp构造...

    ES6正则表达式扩展笔记

    正则表达式是javascript操作字符串的一个重要组成部分,然而,在ES6中,随着字符串操作的变更, ES6也对正则表达式进行了一些更新。本文将详细介绍ES6正则表达式扩展

    ES6、正则表达式、类、函数.rar

    ES5、ES6、类、函数、正则表达式等前端相关知识,学习笔记及相关代码

    PHP匹配连续的数字或字母的正则表达式

    正则表达式的写法规则:“/规则需要写在2个斜杠中间/”。 (. :小数点)用于匹配除换行符之外的所有字符。 (\s:反斜杠小写s)用于匹配单个空格符,包括tab键和换行符; (\S:反斜杠大写S)用于匹配除单个空格符...

    elasticsearch-rest-high-level-client-6.8.3-API文档-中文版.zip

    赠送jar包:elasticsearch-rest-high-level-client-6.8.3.jar; 赠送原API文档:elasticsearch-rest-high-level-client-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-rest-high-level-client-6.8.3-sources.jar;...

    正则表达式u修饰符(支持UTF-16编码)

    此修饰符是ES2015新增,更多正则表达式新特性可以参阅ES2015 正则表达式新增特性一章节。 更多正则表达式教程可以参阅正则表达式教程板块。 代码实例: console.log(/^\uD842/u.test("\uD842\uDFB7")) 输出false,...

    最新版 elasticsearch-analysis-ik-8.7.0.zip

    最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip

Global site tag (gtag.js) - Google Analytics