(52)ElasticSearch之字串排序問題

2022-06-15 05:09:13 字數 1900 閱讀 6728

1、準備資料

put /lib

, "user":,

"address":,

"age":,

"interests":,

"birthday":}}

}}

put /lib/user/1

put /lib/user/2

put /lib/user/3

put /lib/user/4

put /lib/user/5

2、操作演示

1)按照年齡降序排序

get lib/user/_search

},"sort": [

}]}

查詢結果

,

"hits": ,

"sort": [

50]},

,"sort": [

29]},

,"sort": [

26]},

,"sort": [

23]},

,"sort": [

20]}

]}}

因為age是數值型別的,所以可以排序,預設字串型別的不能排序,因為字串型別的已經分詞了。如下根據interests排序會報錯:

get lib/user/_search

},"sort": [

}]}

],"type": "search_phase_execution_exception",

"reason": "all shards failed",

"phase": "query",

"grouped": true

, "failed_shards": [}]

},"status": 400}

3、如何對字串型別的排序

對乙個字串型別的字段進行排序通常不準確,因為已經被分詞成多個詞條了。

解決方式:對欄位索引兩次,一次索引分詞(用於搜尋),一次索引不分詞(用於排序)

1)刪掉上面的lib索引,重新建立,修改 interests 欄位的建立方式,並重新新增如上資料

put /lib

, "user":,

"address":,

"age":,

"interests":

},"fielddata": true

}, "birthday":}}

}}

字串有兩種型別,一種是text,預設分詞,一種是keyword不分詞,interests建立兩種型別的索引,一種text(倒排索引),乙個keyword(正排索引)。

重新執行操作,返回正確結果:

get lib/user/_search

},"sort": [

}]}

,

"hits": ,

"sort": [

"xi huang hejiu,duanlian,lvyou"]},,

"sort": [

"xi huan tingyinyue,changge,tiaowu"]},,

"sort": [

"xi huan hejiu,duanlian,changge"]},,

"sort": [

"xi huan hejiu,duanlian,changge"]},,

"sort": [

"xi huan biancheng,tingyinyue,lvyou"]}]

}}

elasticsearch5 2集群部署

本文主要介紹兩節點集群部署 一 實驗環境 節點1 192.168.115.11 節點2 192.168.115.12 二 安裝配置 具體部署過程見單機版 兩台機器都先安裝完成,之後修改配置檔案 注意 為了達到es的集群必須修改cluster.name和node.name。cluster.name必須...

mysql5 2使用 5 2 使用MySQL資料庫

目前internet上流行的 構架方式是lamp,其中的m即mysql,作為資料庫,mysql以免費 開源 使用方便為優勢成為了很多web開發的後端資料庫儲存引擎。mysql驅動 go中支援mysql的驅動目前比較多,有如下幾種,有些是支援database sql標準,而有些是採用了自己的實現介面,...

mysql5 2使用 5 2 使用MySQL資料庫

目前internet上流行的 構架方式是lamp,其中的m即mysql,作為資料庫,mysql以免費 開源 使用方便為優勢成為了很多web開發的後端資料庫儲存引擎。mysql驅動 go中支援mysql的驅動目前比較多,有如下幾種,有些是支援database sql標準,而有些是採用了自己的實現介面,...