本地英文版地址: ../en/query-dsl-intervals-query.html
根据匹配 词项(term) 的顺序和接近程度返回文档。
intervals
查询使用匹配规则(matching rules),这些规则由一小组定义构成。
然后将这些规则应用于指定 字段(field)
中的 词项(term)。
这些定义产生的最小区间序列跨越了文本主体中的词项(term)。 这些 间隔(interval) 可以由父源进一步组合和过滤。
下面这个 intervals
搜索返回字段 my_text
中包含 my favorite food
的文档,且 my favorite food
后面紧跟着 hot water
或 cold porridge
。
这个搜索会匹配字段 my_text
的值为 my favorite food is cold porridge
的文档,但不会匹配 when it's cold my favorite food is porridge
。
POST _search { "query": { "intervals" : { "my_text" : { "all_of" : { "ordered" : true, "intervals" : [ { "match" : { "query" : "my favorite food", "max_gaps" : 0, "ordered" : true } }, { "any_of" : { "intervals" : [ { "match" : { "query" : "hot water" } }, { "match" : { "query" : "cold porridge" } } ] } } ] } } } } }
match
匹配规则匹配 已分析的文本(analyzed text)。
-
query
-
(必需的,string) 你想在指定的
<field>
中搜索的文本. -
max_gaps
-
(可选, integer) 匹配词项之间的最大位置数。比这更远的词项不会被视为匹配。默认值为
-1
。如果未指定或设置为
-1
,则匹配没有宽度限制。 如果设置为0
,这些词项必须相邻出现。 -
ordered
-
(可选,boolean) 如果为
true
,匹配的词项必须按其指定的顺序出现。默认值为false
。 -
analyzer
-
(可选,string) 用于分析
query
中的 词项(term) 的 analyzer(分析器)。 默认为<field>
的顶级 分析器(analyzer)。 -
filter
- (可选,interval filter 规则对象) 一个可选的 interval filter。
-
use_field
-
(可选,string)
如果指定了,则匹配此 field 而不是顶级
<field>
的间隔。 使用 搜索分析器(search analyzer) 分析该字段中的词项(term)。 这将允许你跨多个字段进行搜索,就好像它们是同一个字段; 例如,你可以将相同的文本索引到 带词干(stemmed) 和 不带词干(unstemmed) 的字段,并在不带词干的字段附近搜索带词干的 词元(token)。
prefix
(前缀) 规则匹配以指定字符集开头的词项。
这个前缀最多可以扩展到匹配 128 个词项。
如果前缀匹配超过 128 个词项,Elasticsearch 将返回一个错误。
可以在字段映射中使用 index-prefixes
选项来避免这个限制。
-
prefix
-
(必需的,string) 你希望在顶级
<field>
中查找的词项的开始字符。 -
analyzer
-
(可选,string) 用于归一化
prefix
的 analyzer(分析器)。 默认为<field>
的顶级 分析器(analyzer)。 -
use_field
-
(可选,string) 如果指定了,则匹配此 field 而不是顶级
<field>
的间隔。如果没有单独指定一个
analyzer
,会使用字段的 搜索分析器(search analyzer) 对prefix
进行归一化。
wildcard
规则使用一个通配符模式匹配词项。
这个模式最多可以扩展到匹配 128 个词项。
如果前缀匹配超过 128 个词项,Elasticsearch 将返回一个错误。
-
pattern
-
(必需的,string) 用于查找匹配的词项的通配符模式。
该参数支持两个通配符操作符:
-
?
,它匹配任意的单个字符 -
*
,它可以匹配零个或多个字符,包括一个空字符
避免模式以
*
或?
开头。 这可能会增加查找匹配词项所需的迭代次数,并降低搜索性能。 -
-
analyzer
-
(可选,string) 用于归一化
pattern
的 analyzer(分析器)。 默认为<field>
的顶级 分析器(analyzer)。 -
use_field
-
(可选,string) 如果指定了,则匹配此 field 而不是顶级
<field>
的间隔。如果没有单独指定一个
analyzer
,会使用字段的 搜索分析器(search analyzer) 对pattern
进行归一化。
fuzzy
规则在由 fuzziness 定义的编辑距离内匹配与所提供的词项相似的词项。
如果模糊扩展匹配超过 128 项,Elasticsearch 将返回错误。
译者注: 请先了解 "编辑距离" (edit distance) 的有关概念。
-
term
- (必需的,string) 要匹配的词项。
-
prefix_length
-
(可选,integer) 创建扩展时,开头字符保持不变的个数。默认为
0
。 -
transpositions
-
(可选,boolean) 指示编辑是否包括两个相邻字符的换位(ab → ba)。默认为
true
。 -
fuzziness
-
(可选,string) 匹配时允许的最大编辑距离。
默认值为
auto
。 有关有效值和更多信息请参考 fuzziness。 -
analyzer
-
(可选,string) 用于对
term
进行归一化的 analyzer(分析器)。 默认为顶级<field>
的分析器(analyzer)。 -
use_field
-
(可选,string) 如果指定了,则匹配此 field 而不是顶级
<field>
的间隔。如果没有单独指定一个
analyzer
,会使用字段的 搜索分析器(search analyzer) 对term
进行归一化。
all_of
规则返回跨越其他规则组合的匹配。
-
intervals
- (必需的,规则对象数组) 要组合的规则数组。 所有规则都必须在文档中产生一个匹配项,以便整个源文件匹配。
-
max_gaps
-
(可选,integer) 匹配词项之间的最大位置数。由规则产生的间隔比这更远则不会被认为是匹配的。默认值为
-1
。如果未指定或设置为
-1
,则匹配没有宽度限制。 如果设置为0
,这些词项必须相邻出现。 -
ordered
-
(可选,boolean) 如果为
true
,匹配的词项必须按其指定的顺序出现。默认值为false
。 -
filter
- (可选,interval filter 规则对象) 用于过滤返回的间隔的规则。
any_of
规则返回由其任意一个子规则产生的间隔。
-
intervals
- (必需的,规则对象的数组) 要匹配的规则的数组。
-
filter
- (可选,interval filter 规则对象) 用于过滤返回的间隔的规则。
filter
规则根据 查询(query) 返回间隔。
有关示例请参考 filter 示例。
-
after
-
(可选,query 对象) 用于返回
filter
规则中某个间隔之后的间隔的查询。 (原文: Query used to return intervals that follow an interval from the filter rule.) -
before
-
(可选,query 对象) 用于返回
filter
规则中某个间隔之前发生的间隔的查询。 -
contained_by
-
(可选,query 对象) 用于从
filter
规则中返回间隔所包含的间隔的查询。 -
containing
-
(可选,query 对象) 用于返回包含
filter
规则中的间隔的间隔的查询。 -
not_contained_by
-
(可选,query 对象) 用于返回
filter
规则中的间隔不包含的间隔的查询。 -
not_containing
-
(可选,query 对象)
用于返回不包含
filter
规则中间隔的间隔的查询。 -
not_overlapping
-
(可选,query 对象)
用于返回与
filter
规则中的间隔不重叠的间隔的查询。 -
overlapping
-
(可选,query 对象)
用于返回与
filter
规则中的间隔重叠的间隔的查询。 -
script
-
(可选,脚本对象)
用于返回匹配文档的脚本。
这个脚本必须返回一个布尔值,
true
或false
。 有关示例请参考 脚本过滤器(script filters)。
下面这个例子包含一个 filter
规则。
它返回的文档中,单词 hot
和 porridge
的位置相差不超过 10 个,且中间没有单词 salty
:
POST _search { "query": { "intervals" : { "my_text" : { "match" : { "query" : "hot porridge", "max_gaps" : 10, "filter" : { "not_containing" : { "match" : { "query" : "salty" } } } } } } } }
可以使用脚本根据间隔的开始(start)位置、结束(end)位置和内部间隙(gap)计数来过滤间隔。
下面这个 filter
脚本将 interval
变量与 start
、end
和 gaps
方法一起使用:
POST _search { "query": { "intervals" : { "my_text" : { "match" : { "query" : "hot porridge", "filter" : { "script" : { "source" : "interval.start > 10 && interval.end < 20 && interval.gaps == 0" } } } } } } }
intervals 查询总是最小化间隔,以确保查询可以线性时间运行。
这有时会导致令人惊讶的结果,尤其是在使用 max_gaps
限制或 filter 时。
例如,以下面的查询为例,搜索包含在短语 hot porridge
中的 salty
:
POST _search { "query": { "intervals" : { "my_text" : { "match" : { "query" : "salty", "filter" : { "contained_by" : { "match" : { "query" : "hot porridge" } } } } } } } }
该查询与包含短语 hot porridge is salty porridge
的文档不匹配,因为 hot porridge
的匹配查询返回的间隔仅覆盖该文档中的前两个词项,并且这些词项与覆盖 salty
的间隔不重叠。
另一个需要注意的限制是包含重叠子规则的 any_of
规则的情况。
特别是,如果其中一个规则是另一个规则的严格 前缀(prefix),那么更长的规则永远不会匹配,这在与 max_gaps
结合使用时会导致意外。
考虑下面这个查询,搜索 the
, 后面紧接着 big
或 big bad
,然后后面再紧接着 wolf
:
POST _search { "query": { "intervals" : { "my_text" : { "all_of" : { "intervals" : [ { "match" : { "query" : "the" } }, { "any_of" : { "intervals" : [ { "match" : { "query" : "big" } }, { "match" : { "query" : "big bad" } } ] } }, { "match" : { "query" : "wolf" } } ], "max_gaps" : 0, "ordered" : true } } } } }
与直觉相反,这个查询与文档 the big bad wolf
不 匹配,
因为中间的 any_of
规则只产生 big
的区间 - big bad
的区间比 big
的区间长,
同时从相同的位置开始,因此被最小化。
在这些情况下,最好重写查询,以便所有选项都显式地显示在顶层:
POST _search { "query": { "intervals" : { "my_text" : { "any_of" : { "intervals" : [ { "match" : { "query" : "the big bad wolf", "ordered" : true, "max_gaps" : 0 } }, { "match" : { "query" : "the big wolf", "ordered" : true, "max_gaps" : 0 } } ] } } } } }
- Elasticsearch权威指南: 其他版本:
- Elasticsearch是什么?
- 7.7版本的新特性
- 开始使用Elasticsearch
- 安装和设置
- 升级Elasticsearch
- 搜索你的数据
- 查询领域特定语言(Query DSL)
- SQL access(暂时不翻译)
- Overview
- Getting Started with SQL
- Conventions and Terminology
- Security
- SQL REST API
- SQL Translate API
- SQL CLI
- SQL JDBC
- SQL ODBC
- SQL Client Applications
- SQL Language
- Functions and Operators
- Comparison Operators
- Logical Operators
- Math Operators
- Cast Operators
- LIKE and RLIKE Operators
- Aggregate Functions
- Grouping Functions
- Date/Time and Interval Functions and Operators
- Full-Text Search Functions
- Mathematical Functions
- String Functions
- Type Conversion Functions
- Geo Functions
- Conditional Functions And Expressions
- System Functions
- Reserved keywords
- SQL Limitations
- 聚合
- 度量(metric)聚合
- 桶(bucket)聚合
- adjacency_matrix 聚合
- auto_date_histogram 聚合
- children 聚合
- composite 聚合
- date_histogram 聚合
- date_range 聚合
- diversified_sampler 聚合
- filter 聚合
- filters 聚合
- geo_distance 聚合
- geohash_grid 聚合
- geotile_grid 聚合
- global 聚合
- histogram 聚合
- ip_range 聚合
- missing 聚合
- nested 聚合
- parent 聚合
- range 聚合
- rare_terms 聚合
- reverse_nested 聚合
- sampler 聚合
- significant_terms 聚合
- significant_text 聚合
- terms 聚合
- 给范围字段分桶的微妙之处
- 管道(pipeline)聚合
- 矩阵(matrix)聚合
- 重度缓存的聚合
- 只返回聚合的结果
- 聚合元数据
- Returning the type of the aggregation
- 使用转换对聚合结果进行索引
- 脚本
- 映射
- 删除的映射类型
- 字段数据类型
- alias(别名)
- array(数组)
- binary(二进制)
- boolean(布尔)
- date(日期)
- date_nanos(日期纳秒)
- dense_vector(密集矢量)
- histogram(直方图)
- flattened(扁平)
- geo_point(地理坐标点)
- geo_shape(地理形状)
- IP
- join(联结)
- keyword(关键词)
- nested(嵌套)
- numeric(数值)
- object(对象)
- percolator(渗透器)
- range(范围)
- rank_feature(特征排名)
- rank_features(特征排名)
- search_as_you_type(输入即搜索)
- Sparse vector
- Text
- Token count
- Shape
- Constant keyword
- Meta-Fields
- Mapping parameters
- Dynamic Mapping
- Text analysis
- Overview
- Concepts
- Configure text analysis
- Built-in analyzer reference
- Tokenizer reference
- Char Group Tokenizer
- Classic Tokenizer
- Edge n-gram tokenizer
- Keyword Tokenizer
- Letter Tokenizer
- Lowercase Tokenizer
- N-gram tokenizer
- Path Hierarchy Tokenizer
- Path Hierarchy Tokenizer Examples
- Pattern Tokenizer
- Simple Pattern Tokenizer
- Simple Pattern Split Tokenizer
- Standard Tokenizer
- Thai Tokenizer
- UAX URL Email Tokenizer
- Whitespace Tokenizer
- Token filter reference
- Apostrophe
- ASCII folding
- CJK bigram
- CJK width
- Classic
- Common grams
- Conditional
- Decimal digit
- Delimited payload
- Dictionary decompounder
- Edge n-gram
- Elision
- Fingerprint
- Flatten graph
- Hunspell
- Hyphenation decompounder
- Keep types
- Keep words
- Keyword marker
- Keyword repeat
- KStem
- Length
- Limit token count
- Lowercase
- MinHash
- Multiplexer
- N-gram
- Normalization
- Pattern capture
- Pattern replace
- Phonetic
- Porter stem
- Predicate script
- Remove duplicates
- Reverse
- Shingle
- Snowball
- Stemmer
- Stemmer override
- Stop
- Synonym
- Synonym graph
- Trim
- Truncate
- Unique
- Uppercase
- Word delimiter
- Word delimiter graph
- Character filters reference
- Normalizers
- Index modules
- Ingest node
- Pipeline Definition
- Accessing Data in Pipelines
- Conditional Execution in Pipelines
- Handling Failures in Pipelines
- Enrich your data
- Processors
- Append Processor
- Bytes Processor
- Circle Processor
- Convert Processor
- CSV Processor
- Date Processor
- Date Index Name Processor
- Dissect Processor
- Dot Expander Processor
- Drop Processor
- Enrich Processor
- Fail Processor
- Foreach Processor
- GeoIP Processor
- Grok Processor
- Gsub Processor
- HTML Strip Processor
- Inference Processor
- Join Processor
- JSON Processor
- KV Processor
- Lowercase Processor
- Pipeline Processor
- Remove Processor
- Rename Processor
- Script Processor
- Set Processor
- Set Security User Processor
- Split Processor
- Sort Processor
- Trim Processor
- Uppercase Processor
- URL Decode Processor
- User Agent processor
- ILM: Manage the index lifecycle
- Monitor a cluster
- Frozen indices
- Roll up or transform your data
- Set up a cluster for high availability
- Snapshot and restore
- Secure a cluster
- Overview
- Configuring security
- User authentication
- Built-in users
- Internal users
- Token-based authentication services
- Realms
- Realm chains
- Active Directory user authentication
- File-based user authentication
- LDAP user authentication
- Native user authentication
- OpenID Connect authentication
- PKI user authentication
- SAML authentication
- Kerberos authentication
- Integrating with other authentication systems
- Enabling anonymous access
- Controlling the user cache
- Configuring SAML single-sign-on on the Elastic Stack
- Configuring single sign-on to the Elastic Stack using OpenID Connect
- User authorization
- Built-in roles
- Defining roles
- Security privileges
- Document level security
- Field level security
- Granting privileges for indices and aliases
- Mapping users and groups to roles
- Setting up field and document level security
- Submitting requests on behalf of other users
- Configuring authorization delegation
- Customizing roles and authorization
- Enabling audit logging
- Encrypting communications
- Restricting connections with IP filtering
- Cross cluster search, clients, and integrations
- Tutorial: Getting started with security
- Tutorial: Encrypting communications
- Troubleshooting
- Some settings are not returned via the nodes settings API
- Authorization exceptions
- Users command fails due to extra arguments
- Users are frequently locked out of Active Directory
- Certificate verification fails for curl on Mac
- SSLHandshakeException causes connections to fail
- Common SSL/TLS exceptions
- Common Kerberos exceptions
- Common SAML issues
- Internal Server Error in Kibana
- Setup-passwords command fails due to connection failure
- Failures due to relocation of the configuration files
- Limitations
- Alerting on cluster and index events
- Command line tools
- How To
- Glossary of terms
- REST APIs
- API conventions
- cat APIs
- cat aliases
- cat allocation
- cat anomaly detectors
- cat count
- cat data frame analytics
- cat datafeeds
- cat fielddata
- cat health
- cat indices
- cat master
- cat nodeattrs
- cat nodes
- cat pending tasks
- cat plugins
- cat recovery
- cat repositories
- cat shards
- cat segments
- cat snapshots
- cat task management
- cat templates
- cat thread pool
- cat trained model
- cat transforms
- Cluster APIs
- Cluster allocation explain
- Cluster get settings
- Cluster health
- Cluster reroute
- Cluster state
- Cluster stats
- Cluster update settings
- Nodes feature usage
- Nodes hot threads
- Nodes info
- Nodes reload secure settings
- Nodes stats
- Pending cluster tasks
- Remote cluster info
- Task management
- Voting configuration exclusions
- Cross-cluster replication APIs
- Document APIs
- Enrich APIs
- Explore API
- Index APIs
- Add index alias
- Analyze
- Clear cache
- Clone index
- Close index
- Create index
- Delete index
- Delete index alias
- Delete index template
- Flush
- Force merge
- Freeze index
- Get field mapping
- Get index
- Get index alias
- Get index settings
- Get index template
- Get mapping
- Index alias exists
- Index exists
- Index recovery
- Index segments
- Index shard stores
- Index stats
- Index template exists
- Open index
- Put index template
- Put mapping
- Refresh
- Rollover index
- Shrink index
- Split index
- Synced flush
- Type exists
- Unfreeze index
- Update index alias
- Update index settings
- Index lifecycle management API
- Ingest APIs
- Info API
- Licensing APIs
- Machine learning anomaly detection APIs
- Add events to calendar
- Add jobs to calendar
- Close jobs
- Create jobs
- Create calendar
- Create datafeeds
- Create filter
- Delete calendar
- Delete datafeeds
- Delete events from calendar
- Delete filter
- Delete forecast
- Delete jobs
- Delete jobs from calendar
- Delete model snapshots
- Delete expired data
- Estimate model memory
- Find file structure
- Flush jobs
- Forecast jobs
- Get buckets
- Get calendars
- Get categories
- Get datafeeds
- Get datafeed statistics
- Get influencers
- Get jobs
- Get job statistics
- Get machine learning info
- Get model snapshots
- Get overall buckets
- Get scheduled events
- Get filters
- Get records
- Open jobs
- Post data to jobs
- Preview datafeeds
- Revert model snapshots
- Set upgrade mode
- Start datafeeds
- Stop datafeeds
- Update datafeeds
- Update filter
- Update jobs
- Update model snapshots
- Machine learning data frame analytics APIs
- Create data frame analytics jobs
- Create inference trained model
- Delete data frame analytics jobs
- Delete inference trained model
- Evaluate data frame analytics
- Explain data frame analytics API
- Get data frame analytics jobs
- Get data frame analytics jobs stats
- Get inference trained model
- Get inference trained model stats
- Start data frame analytics jobs
- Stop data frame analytics jobs
- Migration APIs
- Reload search analyzers
- Rollup APIs
- Search APIs
- Security APIs
- Authenticate
- Change passwords
- Clear cache
- Clear roles cache
- Create API keys
- Create or update application privileges
- Create or update role mappings
- Create or update roles
- Create or update users
- Delegate PKI authentication
- Delete application privileges
- Delete role mappings
- Delete roles
- Delete users
- Disable users
- Enable users
- Get API key information
- Get application privileges
- Get builtin privileges
- Get role mappings
- Get roles
- Get token
- Get users
- Has privileges
- Invalidate API key
- Invalidate token
- OpenID Connect Prepare Authentication API
- OpenID Connect authenticate API
- OpenID Connect logout API
- SAML prepare authentication API
- SAML authenticate API
- SAML logout API
- SAML invalidate API
- SSL certificate
- Snapshot and restore APIs
- Snapshot lifecycle management API
- Transform APIs
- Usage API
- Watcher APIs
- Definitions
- Breaking changes
- Release notes
- Elasticsearch version 7.7.1
- Elasticsearch version 7.7.0
- Elasticsearch version 7.6.2
- Elasticsearch version 7.6.1
- Elasticsearch version 7.6.0
- Elasticsearch version 7.5.2
- Elasticsearch version 7.5.1
- Elasticsearch version 7.5.0
- Elasticsearch version 7.4.2
- Elasticsearch version 7.4.1
- Elasticsearch version 7.4.0
- Elasticsearch version 7.3.2
- Elasticsearch version 7.3.1
- Elasticsearch version 7.3.0
- Elasticsearch version 7.2.1
- Elasticsearch version 7.2.0
- Elasticsearch version 7.1.1
- Elasticsearch version 7.1.0
- Elasticsearch version 7.0.0
- Elasticsearch version 7.0.0-rc2
- Elasticsearch version 7.0.0-rc1
- Elasticsearch version 7.0.0-beta1
- Elasticsearch version 7.0.0-alpha2
- Elasticsearch version 7.0.0-alpha1