原文链接: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*" }}
相关推荐
### 正则表达式基础知识及应用 #### 一、引言 正则表达式是一种强大的文本处理工具,它能够帮助我们高效地完成对文本的搜索、替换和提取工作。正则表达式的应用非常广泛,从简单的字符串匹配到复杂的文本解析都能...
### 正则表达式速查表详解 #### 1. 特殊字符 - **`\`**:转义字符,用于标识接下来的字符是特殊字符还是原义字符,或者指向后引用、八进制转义符。例如: - `n` 匹配字符 `n`。 - `\n` 匹配一个换行符。 - `\\`...
正则表达式查询使用正则表达式进行匹配,提供了高度灵活的匹配能力。例如: ```json GET /my_index/_search { "query": { "regexp": { "my_field": { "value": "a.n" } } } } ``` 在这个示例中: - `regexp...
- 尽量避免使用通配符和正则表达式查询,它们可能导致全索引扫描,降低性能。 - 使用`match_phrase`或`match_phrase_prefix`进行短语匹配,提高查询效率。 - 利用`bool`查询构造复杂的查询条件,通过`should`、`...
Kibana支持丰富的查询语法,如布尔运算符、通配符和正则表达式。 - 创建视觉对象:在Visualize页面,你可以利用各种图表类型(如线图、柱状图、饼图等)创建数据可视化。选择合适的数据源,配置X轴、Y轴以及其他...
全文搜索支持包括短语搜索、模糊搜索、通配符搜索、正则表达式搜索和范围搜索等。这些查询可以应用于多种数据类型,如字符串、数字和日期等。 复合查询则允许用户将多个查询组合成单个查询上下文,以执行更复杂的...
- **避免使用通配符和正则表达式**:它们可能导致全表扫描,影响性能。 - **利用过滤器缓存**:频繁使用的过滤条件可以缓存,提高查询速度。 #### 3.2 使用聚合 - **优化聚合操作**:避免在大基数字段上执行聚合,...
在MySQL中,RLIKE和REGEXP支持更复杂的正则表达式模糊查询。例如,查找所有包含连续重复字符的名字: ```sql SELECT * FROM 表名 WHERE name RLIKE '(.)\1+'; ``` 5. **NOT LIKE** 如果你想排除某些特定模式,...
- **模糊搜索**:支持通配符和正则表达式查询,提供近似搜索功能。 - **高亮显示**:可以突出显示查询结果中的匹配部分,提升用户体验。 - **过滤器和切面搜索**:Filter用于在搜索结果中进一步筛选,而...
- **全文搜索引擎**:为了提高查询效率,项目可能还涉及到全文搜索引擎,如Lucene或Elasticsearch,它们可以快速索引和搜索文本内容。 5. **项目结构**: - **版本控制**:文件名中包含的"furrySearch-master...
在4.6.1版本中,Kibana改进了搜索和过滤机制,支持布尔逻辑操作,如AND、OR和NOT,以及通配符和正则表达式搜索,使得数据筛选更加灵活和精确。 4. 仪表板与视觉工作台: Kibana的仪表板允许用户将多个可视化组件...
3. **模糊匹配**:支持通配符或正则表达式,增加搜索的灵活性。 4. **多线程/并行处理**:利用多核CPU的并行计算能力,加快文件扫描速度。 在实际操作中,用户可能需要搜索特定的短语或模式,而不仅仅是单个单词。...
- **模糊搜索**: 支持通配符和正则表达式查询,如“*”代表任意字符,"??"代表任意单个字符。 - **短语搜索**: 可以搜索连续出现的词组,如“大数据分析”。 - **评分和排序**: 结果根据相关性评分排序,评分越高...
例如,你可以使用AND、OR、NOT等操作符组合多个查询条件,或者使用通配符和正则表达式进行模糊匹配。 此外,Lucene还提供了缓存机制以提高性能,比如字段值缓存和DocValues缓存。为了应对大数据量的索引,Lucene...
6. **多字段搜索**:学习如何在多个字段上进行联合搜索,以及如何处理复杂的查询需求,如范围查询、通配符查询和正则表达式查询。 7. **分布式搜索**:随着数据量的增大,单机搜索可能无法满足需求,因此需要了解...
3. **复杂查询语法**:支持复杂的查询表达式,如通配符查询、正则表达式查询、范围查询等。 4. **分布式搜索**:Solr 和 Elasticsearch 是基于 Lucene 构建的分布式搜索引擎,提供更高级别的集群管理和性能优化。 ...
除了基本的单词查询,Lucene还支持更复杂的查询类型,如PrefixQuery(前缀查询)、WildcardQuery(通配符查询)、FuzzyQuery(模糊查询)、RegexQuery(正则表达式查询)等。这些查询类型极大地扩展了搜索能力,允许...