## 最重要的查詢過濾語句
Elasticsearch 提供了豐富的查詢過濾語句,而有一些是我們較常用到的。
我們將會在后續的《深入搜索》中展開討論,現在我們快速的介紹一下
這些最常用到的查詢過濾語句。
## `term` 過濾
`term`主要用于精確匹配哪些值,比如數字,日期,布爾值或 `not_analyzed`的字符串(未經分析的文本數據類型):
```Javascript
{ "term": { "age": 26 }}
{ "term": { "date": "2014-09-01" }}
{ "term": { "public": true }}
{ "term": { "tag": "full_text" }}
```
## `terms` 過濾
`terms` 跟 `term` 有點類似,但 `terms` 允許指定多個匹配條件。
如果某個字段指定了多個值,那么文檔需要一起去做匹配:
```Javascript
{
"terms": {
"tag": [ "search", "full_text", "nosql" ]
}
}
```
## `range` 過濾
`range`過濾允許我們按照指定范圍查找一批數據:
```Javascript
{
"range": {
"age": {
"gte": 20,
"lt": 30
}
}
}
```
范圍操作符包含:
`gt` :: 大于
`gte`:: 大于等于
`lt` :: 小于
`lte`:: 小于等于
## `exists` 和 `missing` 過濾
`exists` 和 `missing` 過濾可以用于查找文檔中是否包含指定字段或沒有某個字段,類似于SQL語句中的`IS_NULL`條件
```Javascript
{
"exists": {
"field": "title"
}
}
```
這兩個過濾只是針對已經查出一批數據來,但是想區分出某個字段是否存在的時候使用。
## `bool` 過濾
`bool` 過濾可以用來合并多個過濾條件查詢結果的布爾邏輯,它包含一下操作符:
`must` :: 多個查詢條件的完全匹配,相當于 `and`。
`must_not` :: 多個查詢條件的相反匹配,相當于 `not`。
`should` :: 至少有一個查詢條件匹配, 相當于 `or`。
這些參數可以分別繼承一個過濾條件或者一個過濾條件的數組:
```Javascript
{
"bool": {
"must": { "term": { "folder": "inbox" }},
"must_not": { "term": { "tag": "spam" }},
"should": [
{ "term": { "starred": true }},
{ "term": { "unread": true }}
]
}
}
```
## `match_all` 查詢
使用`match_all` 可以查詢到所有文檔,是沒有查詢條件下的默認語句。
```Javascript
{
"match_all": {}
}
```
此查詢常用于合并過濾條件。
比如說你需要檢索所有的郵箱,所有的文檔相關性都是相同的,所以得到的`_score`為1
## `match` 查詢
`match`查詢是一個標準查詢,不管你需要全文本查詢還是精確查詢基本上都要用到它。
如果你使用 `match` 查詢一個全文本字段,它會在真正查詢之前用分析器先分析`match`一下查詢字符:
```Javascript
{
"match": {
"tweet": "About Search"
}
}
```
如果用`match`下指定了一個確切值,在遇到數字,日期,布爾值或者`not_analyzed` 的字符串時,它將為你搜索你給定的值:
```Javascript
{ "match": { "age": 26 }}
{ "match": { "date": "2014-09-01" }}
{ "match": { "public": true }}
{ "match": { "tag": "full_text" }}
```
>**提示**:
>做精確匹配搜索時,你最好用過濾語句,因為過濾語句可以緩存數據。
不像我們在《簡單搜索》中介紹的字符查詢,`match`查詢不可以用類似"+usid:2 +tweet:search"這樣的語句。
它只能就指定某個確切字段某個確切的值進行搜索,而你要做的就是為它指定正確的字段名以避免語法錯誤。
## `multi_match` 查詢
`multi_match`查詢允許你做`match`查詢的基礎上同時搜索多個字段:
```Javascript
{
"multi_match": {
"query": "full text search",
"fields": [ "title", "body" ]
}
}
```
## `bool` 查詢
`bool` 查詢與 `bool` 過濾相似,用于合并多個查詢子句。不同的是,`bool` 過濾可以直接給出是否匹配成功,
而`bool` 查詢要計算每一個查詢子句的 `_score` (相關性分值)。
`must`:: 查詢指定文檔一定要被包含。
`must_not`:: 查詢指定文檔一定不要被包含。
`should`:: 查詢指定文檔,有則可以為文檔相關性加分。
以下查詢將會找到 `title` 字段中包含 "how to make millions",并且 "tag" 字段沒有被標為 `spam`。
如果有標識為 "starred" 或者發布日期為2014年之前,那么這些匹配的文檔將比同類網站等級高:
```Javascript
{
"bool": {
"must": { "match": { "title": "how to make millions" }},
"must_not": { "match": { "tag": "spam" }},
"should": [
{ "match": { "tag": "starred" }},
{ "range": { "date": { "gte": "2014-01-01" }}}
]
}
}
```
>**提示**:
>如果`bool` 查詢下沒有`must`子句,那至少應該有一個`should`子句。但是
如果有`must`子句,那么沒有`should`子句也可以進行查詢。
- Introduction
- 入門
- 是什么
- 安裝
- API
- 文檔
- 索引
- 搜索
- 聚合
- 小結
- 分布式
- 結語
- 分布式集群
- 空集群
- 集群健康
- 添加索引
- 故障轉移
- 橫向擴展
- 更多擴展
- 應對故障
- 數據
- 文檔
- 索引
- 獲取
- 存在
- 更新
- 創建
- 刪除
- 版本控制
- 局部更新
- Mget
- 批量
- 結語
- 分布式增刪改查
- 路由
- 分片交互
- 新建、索引和刪除
- 檢索
- 局部更新
- 批量請求
- 批量格式
- 搜索
- 空搜索
- 多索引和多類型
- 分頁
- 查詢字符串
- 映射和分析
- 數據類型差異
- 確切值對決全文
- 倒排索引
- 分析
- 映射
- 復合類型
- 結構化查詢
- 請求體查詢
- 結構化查詢
- 查詢與過濾
- 重要的查詢子句
- 過濾查詢
- 驗證查詢
- 結語
- 排序
- 排序
- 字符串排序
- 相關性
- 字段數據
- 分布式搜索
- 查詢階段
- 取回階段
- 搜索選項
- 掃描和滾屏
- 索引管理
- 創建刪除
- 設置
- 配置分析器
- 自定義分析器
- 映射
- 根對象
- 元數據中的source字段
- 元數據中的all字段
- 元數據中的ID字段
- 動態映射
- 自定義動態映射
- 默認映射
- 重建索引
- 別名
- 深入分片
- 使文本可以被搜索
- 動態索引
- 近實時搜索
- 持久化變更
- 合并段
- 結構化搜索
- 查詢準確值
- 組合過濾
- 查詢多個準確值
- 包含,而不是相等
- 范圍
- 處理 Null 值
- 緩存
- 過濾順序
- 全文搜索
- 匹配查詢
- 多詞查詢
- 組合查詢
- 布爾匹配
- 增加子句
- 控制分析
- 關聯失效
- 多字段搜索
- 多重查詢字符串
- 單一查詢字符串
- 最佳字段
- 最佳字段查詢調優
- 多重匹配查詢
- 最多字段查詢
- 跨字段對象查詢
- 以字段為中心查詢
- 全字段查詢
- 跨字段查詢
- 精確查詢
- 模糊匹配
- Phrase matching
- Slop
- Multi value fields
- Scoring
- Relevance
- Performance
- Shingles
- Partial_Matching
- Postcodes
- Prefix query
- Wildcard Regexp
- Match phrase prefix
- Index time
- Ngram intro
- Search as you type
- Compound words
- Relevance
- Scoring theory
- Practical scoring
- Query time boosting
- Query scoring
- Not quite not
- Ignoring TFIDF
- Function score query
- Popularity
- Boosting filtered subsets
- Random scoring
- Decay functions
- Pluggable similarities
- Conclusion
- Language intro
- Intro
- Using
- Configuring
- Language pitfalls
- One language per doc
- One language per field
- Mixed language fields
- Conclusion
- Identifying words
- Intro
- Standard analyzer
- Standard tokenizer
- ICU plugin
- ICU tokenizer
- Tidying text
- Token normalization
- Intro
- Lowercasing
- Removing diacritics
- Unicode world
- Case folding
- Character folding
- Sorting and collations
- Stemming
- Intro
- Algorithmic stemmers
- Dictionary stemmers
- Hunspell stemmer
- Choosing a stemmer
- Controlling stemming
- Stemming in situ
- Stopwords
- Intro
- Using stopwords
- Stopwords and performance
- Divide and conquer
- Phrase queries
- Common grams
- Relevance
- Synonyms
- Intro
- Using synonyms
- Synonym formats
- Expand contract
- Analysis chain
- Multi word synonyms
- Symbol synonyms
- Fuzzy matching
- Intro
- Fuzziness
- Fuzzy query
- Fuzzy match query
- Scoring fuzziness
- Phonetic matching
- Aggregations
- overview
- circuit breaker fd settings
- filtering
- facets
- docvalues
- eager
- breadth vs depth
- Conclusion
- concepts buckets
- basic example
- add metric
- nested bucket
- extra metrics
- bucket metric list
- histogram
- date histogram
- scope
- filtering
- sorting ordering
- approx intro
- cardinality
- percentiles
- sigterms intro
- sigterms
- fielddata
- analyzed vs not
- 地理坐標點
- 地理坐標點
- 通過地理坐標點過濾
- 地理坐標盒模型過濾器
- 地理距離過濾器
- 緩存地理位置過濾器
- 減少內存占用
- 按距離排序
- Geohashe
- Geohashe
- Geohashe映射
- Geohash單元過濾器
- 地理位置聚合
- 地理位置聚合
- 按距離聚合
- Geohash單元聚合器
- 范圍(邊界)聚合器
- 地理形狀
- 地理形狀
- 映射地理形狀
- 索引地理形狀
- 查詢地理形狀
- 在查詢中使用已索引的形狀
- 地理形狀的過濾與緩存
- 關系
- 關系
- 應用級別的Join操作
- 扁平化你的數據
- Top hits
- Concurrency
- Concurrency solutions
- 嵌套
- 嵌套對象
- 嵌套映射
- 嵌套查詢
- 嵌套排序
- 嵌套集合
- Parent Child
- Parent child
- Indexing parent child
- Has child
- Has parent
- Children agg
- Grandparents
- Practical considerations
- Scaling
- Shard
- Overallocation
- Kagillion shards
- Capacity planning
- Replica shards
- Multiple indices
- Index per timeframe
- Index templates
- Retiring data
- Index per user
- Shared index
- Faking it
- One big user
- Scale is not infinite
- Cluster Admin
- Marvel
- Health
- Node stats
- Other stats
- Deployment
- hardware
- other
- config
- dont touch
- heap
- file descriptors
- conclusion
- cluster settings
- Post Deployment
- dynamic settings
- logging
- indexing perf
- rolling restart
- backup
- restore
- conclusion