鍍金池/ 教程/ Java/ 范圍
創(chuàng)建索引
文檔局部更新
映射
查詢與過濾條件的合并
取回階段
查詢地理形狀
相關(guān)性簡介
動態(tài)索引
處理沖突
geohash單元聚合器
主分片和復(fù)制分片如何交互
自定義分析器
下一步
過濾順序
空集群
數(shù)據(jù)吞吐
地理坐標(biāo)點(diǎn)
嵌套-映射
動態(tài)映射
在查詢中使用已索引的形狀
局部更新文檔
包含,而不是相等
范圍
檢索文檔
映射及分析
結(jié)語
結(jié)構(gòu)化查詢 Query DSL
驗(yàn)證查詢
查找準(zhǔn)確值
Geohashes
結(jié)構(gòu)化搜索
復(fù)合核心字段類型
嵌套-集合
與Elasticsearch交互
請求體查詢
自定義動態(tài)索引
簡易搜索
索引一個文檔
地理形狀
緩存地理位置過濾器
多文檔模式
  • 1.
分布式搜索的執(zhí)行方式
安裝Elasticsearch
地理位置聚合
分析和分析器
元數(shù)據(jù):_all 字段
地理坐標(biāo)盒模型過濾器
類型和映射
合并段
查詢多個準(zhǔn)確值
嵌套-查詢
  • 1.
為什么是奇怪的格式?
Geohashes 映射
關(guān)于緩存
開始第一步
為了搜索,你懂的
分布式的特性
添加索引
確切值(Exact values) vs. 全文文本(Full text)
掃描和滾屏
相關(guān)性排序
教程小結(jié)
數(shù)據(jù)字段
增加故障轉(zhuǎn)移
按距離排序
索引管理
分布式文檔存儲
geohash單元過濾器
嵌套排序
檢索多個文檔
新建、索引和刪除文檔
Geohashes
檢索文檔
減少內(nèi)存占用
重新索引數(shù)據(jù)
檢索文檔
按距離聚合
什么是文檔?
繼續(xù)擴(kuò)展
集群健康
入門
映射(mapping)
近實(shí)時搜索
地理形狀的過濾與緩存
集群內(nèi)部工作方式
應(yīng)對故障
范圍(邊界)聚合器
分析
分頁
刪除文檔
倒排索引
索引地理形狀
嵌套-對象
  • 1.
橫向擴(kuò)展
查詢階段
元數(shù)據(jù):_source 字段
多索引和多類別
路由文檔到分片
索引設(shè)置
williamzhao
多值字段字符串排序
創(chuàng)建一個新文檔
配置分析器
地理形狀
更新整個文檔
面向文檔
處理 Null 值
映射地理形狀
使文本可以被搜索
索引別名和零停機(jī)時間
通過地理坐標(biāo)點(diǎn)過濾
地理距離過濾器
搜索——基本的工具
空搜索
搜索選項(xiàng)
更新時的批量操作
最重要的查詢過濾語句
結(jié)語
組合過濾
地理位置聚合
根對象
默認(rèn)映射
文檔 ID
持久化變更
檢查文檔是否存在
入門
地理坐標(biāo)點(diǎn)

范圍

范圍

我們到現(xiàn)在只搜索過準(zhǔn)確的數(shù)字,現(xiàn)實(shí)中,通過范圍來過濾更為有用。例如,你可能希望找到所有價(jià)格高于 20 元而低于 40 元的產(chǎn)品。

在 SQL 語法中,范圍可以如下表示:

SELECT document
FROM   products
WHERE  price BETWEEN 20 AND 40

Elasticsearch 有一個 range 過濾器,讓你可以根據(jù)范圍過濾:

"range" : {
    "price" : {
        "gt" : 20,
        "lt" : 40
    }
}

range 過濾器既能包含也能排除范圍,通過下面的選項(xiàng):

  • gt: > 大于
  • lt: < 小于
  • gte: >= 大于或等于
  • lte: <= 小于或等于

下面是范圍過濾器的一個示例:

GET /my_store/products/_search
{
    "query" : {
        "filtered" : {
            "filter" : {
                "range" : {
                    "price" : {
                        "gte" : 20,
                        "lt"  : 40
                    }
                }
            }
        }
    }
}

假如你需要不設(shè)限的范圍,去掉一邊的限制就可以了:

"range" : {
    "price" : {
        "gt" : 20
    }
}

日期范圍

range 過濾器也可以用于日期字段:

"range" : {
    "timestamp" : {
        "gt" : "2014-01-01 00:00:00",
        "lt" : "2014-01-07 00:00:00"
    }
}

當(dāng)用于日期字段時,range 過濾器支持_日期數(shù)學(xué)_操作。例如,我們想找到所有最近一個小時的文檔:

"range" : {
    "timestamp" : {
        "gt" : "now-1h"
    }
}

這個過濾器將始終能找出所有時間戳大于當(dāng)前時間減 1 小時的文檔,讓這個過濾器像_移窗_一樣通過你的文檔。

日期計(jì)算也能用于實(shí)際的日期,而不是僅僅是一個像 now 一樣的占位符。只要在日期后加上雙豎線 ||,就能使用日期數(shù)學(xué)表達(dá)式了。

"range" : {
    "timestamp" : {
        "gt" : "2014-01-01 00:00:00",
        "lt" : "2014-01-01 00:00:00||+1M" <1>
    }
}

早于 2014 年 1 月 1 號加一個月 日期計(jì)算是與_日歷相關(guān)_的,所以它知道每個月的天數(shù),每年的天數(shù),等等。更詳細(xì)的關(guān)于日期的信息可以在這里找到 [日期格式手冊](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-date-format.html) #### 字符串范圍 `range` 過濾器也可以用于字符串。字符串范圍根據(jù)_字典_或字母順序來計(jì)算。例如,這些值按照字典順序排序: * 5, 50, 6, B, C, a, ab, abb, abc, b 提示:倒排索引中的短語按照字典順序排序,也是為什么字符串范圍使用這個順序。 假如我們想讓范圍從 `a` 開始而不包含 `b`,我們可以用類似的 `range` 過濾器語法: ```json "range" : { "title" : { "gte" : "a", "lt" : "b" } } ``` 當(dāng)心基數(shù): 數(shù)字和日期字段的索引方式讓他們在計(jì)算范圍時十分高效。但對于字符串來說卻不是這樣。為了在字符串上執(zhí)行范圍操作,Elasticsearch 會在這個范圍內(nèi)的每個短語執(zhí)行 `term` 操作。這比日期或數(shù)字的范圍操作慢得多。 字符串范圍適用于一個基數(shù)較小的字段,一個唯一短語個數(shù)較少的字段。你的唯一短語數(shù)越多,搜索就越慢。

上一篇:路由文檔到分片下一篇:合并段