⑴ ElasticSearch有類似mysql的distinct的語法嗎
SELECT 指令讓我們能夠讀取表格中一個或數個欄位的所有資料。 這將把所有的資料都抓出,無論資料值有無重復。在資料處理中,我們會經常碰到需要找出表格內的不同 資料值的情況。換句話說,我們需要知道這個表格/欄位內有哪些不同的值,而每個值出現的次數並不重要。這要如何達成呢?在 SQL 中,這是很容易做到的。我們只要在 SELECT 後加上一個 DISTINCT 就可以了。DISTINCT 的語法如下:
SELECT DISTINCT "欄位名"
FROM "表格名"
舉例來說,若要在以下的表格,Store_Information,找出所有不同的店名時,
Store_Information表格
store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999
我們就打入,
SELECT DISTINCT store_name FROM Store_Information
結果:
store_name
Los Angeles
San Diego
Boston
⑵ elasticsearch 怎麼實現模糊匹配
QueryDSL如下:
{
"query": {
"bool": {
"must": [
{
"term": {
"category_id": "7"
}
},
{
"term": {
"enable": 1
}
},
{
"term": {
"status": 2
}
},
{
"range": {
"stock": {
"gt": 0
}
}
},
{
"match": {
"search_field": {
⑶ ElasticSearch中Filter和Query的異同
query與filter
1、區別如下:
query是要相關性評分的,filter不要;
query結果無法緩存,filter可以。
所以,選擇參考:
1、全文搜索、評分排序,使用query;
2、是非過濾,精確匹配,使用filter。
⑷ 為什麼elasticsearch和hbase的jar包沖突過濾不掉
其實就是將org.joda等4個可能有沖突的jar包通過maven-shade-plugin插件遷移後重新打個jar包從而使得在引入這個jar包時能夠使用該jar包自己的依賴而不是使用外部依賴。
這里笨小蔥一開始犯了個嚴重的錯誤,我一直以為只有guava這一個包沖突了,所以一開始並沒有做com.google.common的jar包遷移。所以在使用hbase時出現了如下錯誤:
Java.lang.IllegalAccessError: tried to access method com.google.common.base........
後來引入com.google.common後才解決問題。
pom文件配置完成後運行:
mvn clean install
然後看到build success的話表示打包成功,新的依賴包會在.m2文件的倉庫中。
下面回到原來的集成項目的pom文件中。引入該jar包: (注意這里需要排除掉es2.2.0的jar包,不然maven會將2.2.0的jar包打進去,造成沖突)
<dependency>
<groupId>my.elasticsearch</groupId>
<artifactId>es-shaded</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
</exclusions>
</dependency>
好啦,到這里測試一下會發現,沖突問題解決啦。
⑸ elasticsearch的filter疑問
離家已二年。
⑹ ElasticSearch有類似mysql的distinct的語法嗎
SELECT 指令讓我們能夠讀取表格中一個或數個欄位的所有資料。 這將把所有的資料都抓出,無論資料值有無重復。在資料處理中,我們會經常碰到需要找出表格內的不同 資料值的情況。換句話說,我們需要知道這個表格/欄位內有哪些不同的值,而每個值出現的次數並不重要。這要如何達成呢?在 SQL 中,這是很容易做到的。我們只要在 SELECT 後加上一個 DISTINCT 就可以了。DISTINCT 的語法如下: SELECT DISTINCT "欄位名" FROM "表格名" 舉例來說,若要在以下的表格,Store_Information,找出所有不同的店名時, Store_Information表格 store_name Sales Date Los Angeles $1500 Jan-05-1999 San Diego $250 Jan-07-1999 Los Angeles $300 Jan-08-1999 Boston $700 Jan-08-1999 我們就打入, SELECT DISTINCT store_name FROM Store_Information 結果: store_name Los Angeles San Diego Boston
⑺ 請教elasticsearch自定義結果集過濾如何支持
用groovy腳本自定義ElasticSearch查詢,來實現以上功能。 例,數據中包含欄位birdtyday,記錄遊客生日: "birthday": "1992-02-05 00:00:00", 新建文件getAgeByBirthday.groovy,編輯其內容為: def b = doc[birthday_field].value def birthday = new Date(b) def now = new Date() long age = (now -birthday)/365 age 並把此文件放在es的config/scripts目錄下(如果沒有此目錄就新建一個)。 然後在config/elasticsearch.yml文件中加一行: script.groovy.sandbox.enabled: true 最後重啟es即可。 接下來,我們就可以用以下DSL進行年齡統計了 GET /lovingtrip-report/hotelcustomer/_search?search_type=count { "aggs": { "counts_by_age": { "terms": { "script_file": "getAgeByBirthday", "params": { "birthday_field": "birthday" }, "size": 100 } } } } 或者: GET /lovingtrip-report/hotelcustomer/_search?search_type=count { "aggs": { "histogram_by_age": { "histogram": { "script_file": "getAgeByBirdthday", "params": { "birdthday_field": "birdthday" }, "interval": 5 } } } } 不過腳本查詢性能不佳,且不能利用es的緩存,所以在大數據量或高性能要求的場景下不適用。。 ------------------------------------- 補充一個自定義的年齡range過濾: range_AgeByBirthday.groovy: def b = doc[birdthday_field].value def birdthday = new Date(b) def now = new Date() long age = (now -birdthday)/365 gte<=age && age<=lte DSL: GET /lovingtrip-report/hotelcustomer/_search?search_type=count { "query": { "filtered": { "filter": { "script": { "script_file": "range_AgeByBirdthday", "params": { "birdthday_field": "birdthday", "gte": 50, "lte": 60 } } } } }, "aggs": { "histogram_by_age": { "histogram": { "script_file": "getAgeByBirdthday", "params": { "birdthday_field": "birdthday" }, "interval": 5 } } } }
⑻ elasticsearch怎樣將重復的索引去除
Elasticsearch是一個高伸縮、高可用、基於Apache Lucene的開源搜索與分析引擎。通過它你可以很方便地對數據進行深入挖掘,可以隨時放大與縮小搜索與分析的區間,並且這一切都是實時的。為了提供了一個優秀的用戶體驗,我們對Elasticsearch投入了...
⑼ ElasticSearch有類似mysql的distinct的語法嗎
在 SQL 中,這是很容易做到的。我們只要在 SELECT 後加上一個 DISTINCT 就可以了。DISTINCT 的語法如下:
SELECT DISTINCT "欄位名"
FROM "表格名"
舉例來說,若要在以下的表格,Store_Information,找出所有不同的店名時,
Store_Information表格
store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999
我們就打入,
SELECT DISTINCT store_name FROM Store_Information
結果:
store_name
Los Angeles
San Diego
Boston