elasticsearch使用小結(ES使用小結)


本文章總結自己在使用es過程中遇到的一些場景與解決辦法。

1.查詢結果排序

  使用es進程query時,默認是按照_score排序的,當score同分時,同分結果順序就不確定了(可能是按更新時間排序),如果要進行二次排序,就要用到sort功能了,話不多說,上代碼:

POST /templatename/_search
{
    "from" : 0, "size" : 50, "query": { "match" : { "question" :"你說我的社保怎么交好呢?" } }, "track_scores": true, "sort" : [ "_score", { "idx" : {"order" : "desc","unmapped_type" : "long" }} ] }

這里score元素攜帶了排序信息,分別按_score和source中的idx元素排序,可以指定正序或逆序。unmapped_type不設置時,如果source中不包含idx元素,查詢會返回錯誤信息,包含時,可以使用默認值填充,正序使用最大值,逆序使用最小值等。

使用了score元素默認不會計算最高分,攜帶track_scores元素可以繼續計算最高分,一般沒有這個必要。

下面看javaAPI的使用方式:

        SearchRequestBuilder requestBuilder = this.getClient().prepareSearch(alias).setTypes(type);
        MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("question", question);
        //在評分排序基礎上進行id的升序排序,使粗排分數相同的項順序相同,unmappedType可以理解為,如果不存在改字段,則識別為long的最大(最小)值,位置在最后,避免直接返回不存在錯誤
        FieldSortBuilder idSort = SortBuilders.fieldSort("idx").order(SortOrder.ASC).unmappedType("long");
        SearchResponse response = requestBuilder.setQuery(queryBuilder).setFrom(0).setSize(50).addSort(new ScoreSortBuilder()).addSort(idSort).get();

這里要注意的是score排序和source元素排序是有區別的,_score排序使用ScoreSortBuilder才能識別為es的"_score",否則會認為是source元素,source元素排序參數使用SortBuilders構造

 

 

2.查詢index時指定列返回

按照官方參考文檔,我門很容易知道“GET _cat/indices?v”可以返回所有索引的列表和其基本信息,但這只是“基本信息”,如果想要獲取更多信息則需要定制“信息列”。

可以使用“GET _cat/indices?help”查看支持的列信息以及其對應簡寫、說明,然后使用h=col1,col2的形式定制

如下,定制了h(current health status)、i(index name)、cd(index creation date (millisecond value))、cds(index creation date (as string))4個列.

GET _cat/indices?h=h,i,cd,cds

javaAPI調用方式:暫時未研究


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM