日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

elasticsearch实战三部曲之三:搜索操作

發布時間:2025/3/21 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 elasticsearch实战三部曲之三:搜索操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

elasticsearch實戰三部曲之三:搜索操作

2019年01月13日 21:35:18?博陵精騎?閱讀數:1367?標簽:?elasticsearch?更多

個人分類:?elasticsearch

所屬專欄:?elasticsearch之旅

版權聲明:歡迎轉載,請注明出處,謝謝。 https://blog.csdn.net/boling_cavalry/article/details/86413235

本文是《elasticsearch實戰三部曲》的終篇,作為elasticsearch的核心功能,搜索的重要性不言而喻,今天的實戰都會圍繞搜索展開;

系列文章鏈接

  • 《elasticsearch實戰三部曲之一:索引操作》;
  • 《elasticsearch實戰三部曲之二:文檔操作》;
  • 《elasticsearch實戰三部曲之三:搜索操作》;
  • 環境信息

  • 本次實戰用到的elasticsearch版本是6.5.4,安裝在Ubuntu 16.04.5 LTS,客戶端工具是postman6.6.1;
  • 如果您需要搭建elasticsearch環境,請參考《Linux環境快速搭建elasticsearch6.5.4集群和Head插件》;
  • 基本情況介紹

    本次實戰的elasticsearch環境以及搭建完畢,是由兩個機器搭建的集群,并且elasticsearch-head也搭建完成:

  • 一號機器,IP地址:192.168.119.152;
  • 二號機器:IP地址:192.168.119.153;
  • elasticsearch-head安裝在一號機器,訪問地址:http://192.168.119.152:9100
  • 已經建立了索引englishbooks,對應的數據如下所示,請用批量命令導入到elasticsearch:
  • <span style="color:#000000"><code class="language-json"><span style="color:#999999">{</span><span style="color:#669900">"index"</span><span style="color:#999999">:</span><span style="color:#999999">{</span> <span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span> <span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span> <span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"1"</span> <span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span><span style="color:#669900">"1"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span><span style="color:#669900">"Deep Learning"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span><span style="color:#669900">"python"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span><span style="color:#669900">"Yoshua Bengio"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span><span style="color:#98c379">549.00</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span><span style="color:#669900">"2016-11-18"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span><span style="color:#669900">"written by three experts in the field, deep learning is the only comprehensive book on the subject."</span><span style="color:#999999">}</span> <span style="color:#999999">{</span><span style="color:#669900">"index"</span><span style="color:#999999">:</span><span style="color:#999999">{</span> <span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span> <span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span> <span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"2"</span> <span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span><span style="color:#669900">"2"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span><span style="color:#669900">"Compilers"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span><span style="color:#669900">"c"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span><span style="color:#669900">"Alfred V.Aho"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span><span style="color:#98c379">62.50</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span><span style="color:#669900">"2011-01-01"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span><span style="color:#669900">"In the time since the 1986 edition of this book, the world of compiler designhas changed significantly."</span><span style="color:#999999">}</span> <span style="color:#999999">{</span><span style="color:#669900">"index"</span><span style="color:#999999">:</span><span style="color:#999999">{</span> <span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span> <span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span> <span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"3"</span> <span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span><span style="color:#669900">"3"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span><span style="color:#669900">"Core Java"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span><span style="color:#669900">"java"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span><span style="color:#669900">"Horstmann"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span><span style="color:#98c379">85.90</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span><span style="color:#669900">"2016-06-01"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span><span style="color:#669900">"The book is aimed at experienced programmers who want to learn how to write useful Java applications and applets. "</span><span style="color:#999999">}</span> <span style="color:#999999">{</span><span style="color:#669900">"index"</span><span style="color:#999999">:</span><span style="color:#999999">{</span> <span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span> <span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span> <span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"4"</span> <span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span><span style="color:#669900">"4"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span><span style="color:#669900">"Thinking in Java"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span><span style="color:#669900">"java"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span><span style="color:#669900">"Bruce Eckel"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span><span style="color:#98c379">70.10</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span><span style="color:#669900">"2015-07-06"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span><span style="color:#669900">"Thinking in Java should be read cover to cover by every Java programmer, then kept close at hand for frequent reference. The exercises are challenging, and the chapter on Collections is superb!"</span><span style="color:#999999">}</span> <span style="color:#999999">{</span><span style="color:#669900">"index"</span><span style="color:#999999">:</span><span style="color:#999999">{</span> <span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span> <span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span> <span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"5"</span> <span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span><span style="color:#669900">"5"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span><span style="color:#669900">"The Go Programming Language"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span><span style="color:#669900">"go"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span><span style="color:#669900">"Alan A.A.Donovan"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span><span style="color:#98c379">63.90</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span><span style="color:#669900">"2016-01-01"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span><span style="color:#669900">"A declaration's lexical block determines its scope, which may be large or small. The declarations of built—in types, functions, and constants like int, len, and true are in the universe block and can be referred to throughout the entire program."</span><span style="color:#999999">}</span></code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相關的文檔是批量導入的,關于文檔數據和批量操作的細節請參考《elasticsearch實戰三部曲之二:文檔操作》;
  • books索引的文檔內容在head中展示如下圖:
  • 數據格式說明

    為了便于和讀者溝通,我們來約定一下如何在文章中表達請求和響應的信息:

  • 假設通過Postman工具向服務器發送一個PUT類型的請求,地址是:http://192.168.119.152:9200/test001/article/1
  • 請求的內容是JSON格式的,內容如下:
  • <span style="color:#000000"><code class="language-shell"><span style="color:#999999">{</span>“id”:1,<span style="color:#669900">"title"</span><span style="color:#c678dd">:</span><span style="color:#669900">"標題a"</span>,<span style="color:#669900">"posttime"</span><span style="color:#c678dd">:</span><span style="color:#669900">"2019-01-12"</span>,<span style="color:#669900">"content"</span><span style="color:#c678dd">:</span><span style="color:#669900">"一起來熟悉文檔相關的操作"</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    對于上面的請求,我在文章中就以如下格式描述:

    <span style="color:#000000"><code class="language-shell">PUT test001/article/1<span style="color:#999999">{</span>“id”:1,<span style="color:#669900">"title"</span><span style="color:#c678dd">:</span><span style="color:#669900">"標題a"</span>,<span style="color:#669900">"posttime"</span><span style="color:#c678dd">:</span><span style="color:#669900">"2019-01-12"</span>,<span style="color:#669900">"content"</span><span style="color:#c678dd">:</span><span style="color:#669900">"一起來熟悉文檔相關的操作"</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    讀者您看到上述內容,就可以在postman中發起PUT請求,地址是"test001/article/1"前面加上您的服務器地址,內容是上面的JSON;

    本文中的文檔內容暫不涉及中文

    文中數據都是英文的,避免在因分詞器的分詞問題導致搜索不到對應的中文結果,分詞器相關的知識會在另一篇文章中詳細介紹;

    查看所有數據

    <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"match_all"</span>:<span style="color:#999999">{</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    上述查詢返回索引books的所有記錄,并且文檔得分收是1;
    您可以將請求的整個JSON刪除,只用books/_search這個URL來試試,也能得到所有數據,這是match_all的簡寫;

    數字字段的精確匹配

    查詢價格等于549的記錄:

    <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"constant_score"</span>:<span style="color:#999999">{</span><span style="color:#669900">"filter"</span>:<span style="color:#999999">{</span><span style="color:#669900">"term"</span>:<span style="color:#999999">{</span><span style="color:#669900">"price"</span>:549<span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    得到結果:

    <span style="color:#000000"><code class="language-json"><span style="color:#999999">{</span><span style="color:#669900">"took"</span><span style="color:#999999">:</span> <span style="color:#98c379">4</span><span style="color:#999999">,</span><span style="color:#669900">"timed_out"</span><span style="color:#999999">:</span> <span style="color:#56b6c2">false</span><span style="color:#999999">,</span><span style="color:#669900">"_shards"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"successful"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"skipped"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#669900">"failed"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"max_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">[</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"1"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"1"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Deep Learning"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"python"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Yoshua Bengio"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">549</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2016-11-18"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"written by three experts in the field, deep learning is the only comprehensive book on the subject."</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">]</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    請求參數中使用了constant_score 后,查詢將以非評分模式來執行 term,并以一作為統一評分;

    查看分詞效果

    text類型的字段會被分詞后構建倒排索引,來看看title字段的值為"Core Java"時的分詞效果:

    <span style="color:#000000"><code class="language-shell">GET englishbooks/_analyze<span style="color:#999999">{</span><span style="color:#669900">"field"</span><span style="color:#c678dd">:</span><span style="color:#669900">"title"</span>,<span style="color:#669900">"text"</span><span style="color:#c678dd">:</span><span style="color:#669900">"Core Java"</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    響應如下所示,"Core Java"被分"core"和"java"兩個詞,也就是說我們以詞項"core"或"java"搜索title字段都能收到對應文檔:

    <span style="color:#000000"><code class="language-json"><span style="color:#999999">{</span><span style="color:#669900">"tokens"</span><span style="color:#999999">:</span> <span style="color:#999999">[</span><span style="color:#999999">{</span><span style="color:#669900">"token"</span><span style="color:#999999">:</span> <span style="color:#669900">"core"</span><span style="color:#999999">,</span><span style="color:#669900">"start_offset"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#669900">"end_offset"</span><span style="color:#999999">:</span> <span style="color:#98c379">4</span><span style="color:#999999">,</span><span style="color:#669900">"type"</span><span style="color:#999999">:</span> <span style="color:#669900">"<ALPHANUM>"</span><span style="color:#999999">,</span><span style="color:#669900">"position"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#999999">{</span><span style="color:#669900">"token"</span><span style="color:#999999">:</span> <span style="color:#669900">"java"</span><span style="color:#999999">,</span><span style="color:#669900">"start_offset"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"end_offset"</span><span style="color:#999999">:</span> <span style="color:#98c379">9</span><span style="color:#999999">,</span><span style="color:#669900">"type"</span><span style="color:#999999">:</span> <span style="color:#669900">"<ALPHANUM>"</span><span style="color:#999999">,</span><span style="color:#669900">"position"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">}</span><span style="color:#999999">]</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    需要注意的是分詞后的結果都是小寫,這是分詞器的處理結果;

    詞項查詢(term query)

    前面我們查看分詞效果發現"Core Java"被分"core"和"java"兩個詞,現在就以"java"為關鍵詞搜索一下試試:

    <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"term"</span>:<span style="color:#999999">{</span><span style="color:#669900">"title"</span><span style="color:#c678dd">:</span><span style="color:#669900">"java"</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    結果如下,title中有java關鍵詞的兩個文檔都被搜到:

    <span style="color:#000000"><code class="language-json"><span style="color:#999999">{</span><span style="color:#669900">"took"</span><span style="color:#999999">:</span> <span style="color:#98c379">4</span><span style="color:#999999">,</span><span style="color:#669900">"timed_out"</span><span style="color:#999999">:</span> <span style="color:#56b6c2">false</span><span style="color:#999999">,</span><span style="color:#669900">"_shards"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"successful"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"skipped"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#669900">"failed"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">2</span><span style="color:#999999">,</span><span style="color:#669900">"max_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">0.5754429</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">[</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"4"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">0.5754429</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"4"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Thinking in Java"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"java"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Bruce Eckel"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">70.1</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2015-07-06"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"Thinking in Java should be read cover to cover by every Java programmer, then kept close at hand for frequent reference. The exercises are challenging, and the chapter on Collections is superb!"</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"3"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">0.2876821</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"3"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Core Java"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"java"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Horstmann"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">85.9</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2016-06-01"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"The book is aimed at experienced programmers who want to learn how to write useful Java applications and applets. "</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">]</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    分詞查詢(match query)

  • term query的特點是將輸入的內容作為一個詞項來用,例如以下的查詢是沒有結果的:
  • <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"term"</span>:<span style="color:#999999">{</span><span style="color:#669900">"title"</span><span style="color:#c678dd">:</span><span style="color:#669900">"core java"</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    上述查詢沒有結果的原因,是因為"core java"被當做一個詞項去查詢了,而title的分詞結果中只有"core"、"java"這些分詞過的詞項,并沒有一個叫做"core java"的詞項,所以搜不到結果;

  • 如果輸入的查詢條件"core java"也被做一次分詞處理,再把處理結果"core"和"java"用來搜索,應該就能得到結果了,match query就是用來對輸入條件做分詞處理的,如下:
  • <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"match"</span>:<span style="color:#999999">{</span><span style="color:#669900">"title"</span><span style="color:#c678dd">:</span><span style="color:#669900">"Core Java"</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    搜索結果如下,包含了java的兩條記錄都被查出來了:

    <span style="color:#000000"><code class="language-json"><span style="color:#999999">{</span><span style="color:#669900">"took"</span><span style="color:#999999">:</span> <span style="color:#98c379">8</span><span style="color:#999999">,</span><span style="color:#669900">"timed_out"</span><span style="color:#999999">:</span> <span style="color:#56b6c2">false</span><span style="color:#999999">,</span><span style="color:#669900">"_shards"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"successful"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"skipped"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#669900">"failed"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">2</span><span style="color:#999999">,</span><span style="color:#669900">"max_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">0.5754429</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">[</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"4"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">0.5754429</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"4"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Thinking in Java"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"java"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Bruce Eckel"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">70.1</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2015-07-06"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"Thinking in Java should be read cover to cover by every Java programmer, then kept close at hand for frequent reference. The exercises are challenging, and the chapter on Collections is superb!"</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"3"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">0.5753642</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"3"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Core Java"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"java"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Horstmann"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">85.9</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2016-06-01"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"The book is aimed at experienced programmers who want to learn how to write useful Java applications and applets. "</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">]</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
  • 如果我們的本意是只要"Core Java"的匹配結果,上面的結果顯然是不符合要求的,此時可以給查詢條件加個"operator":"and"屬性,就會查詢匹配了所有關鍵詞的文檔,注意json的結構略有變化,以前title的屬性是搜索條件,現在變成了一個json對象,里面的query屬性是原來的搜索條件:
  • <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"match"</span>:<span style="color:#999999">{</span><span style="color:#669900">"title"</span>:<span style="color:#999999">{</span><span style="color:#669900">"query"</span><span style="color:#c678dd">:</span><span style="color:#669900">"Core Java"</span>,<span style="color:#669900">"operator"</span><span style="color:#c678dd">:</span><span style="color:#669900">"and"</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    這次的搜索結果就是同時匹配了"core"和"java"兩個詞項的記錄了(為什么core和java是小寫? 因為"Core Java"被分詞后改為了小寫,再去搜索的):

    <span style="color:#000000"><code class="language-json"><span style="color:#999999">{</span><span style="color:#669900">"took"</span><span style="color:#999999">:</span> <span style="color:#98c379">11</span><span style="color:#999999">,</span><span style="color:#669900">"timed_out"</span><span style="color:#999999">:</span> <span style="color:#56b6c2">false</span><span style="color:#999999">,</span><span style="color:#669900">"_shards"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"successful"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"skipped"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#669900">"failed"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"max_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">0.5753642</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">[</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"3"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">0.5753642</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"3"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Core Java"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"java"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Horstmann"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">85.9</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2016-06-01"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"The book is aimed at experienced programmers who want to learn how to write useful Java applications and applets. "</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">]</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    match_phrase搜索

    match_phrase搜索和前面的match搜索相似,并且有以下兩個特點:

  • 分詞后的所有詞項都要匹配上,也就是前面的"operator":"and"屬性的效果;
  • 分析后的詞項順序要和搜索字段的順序一致,才能匹配上;
  • <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"match_phrase"</span>:<span style="color:#999999">{</span><span style="color:#669900">"title"</span><span style="color:#c678dd">:</span><span style="color:#669900">"Core Java"</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    上述查詢可以搜索到結果,但如果將"Core Java"改成"Java Core"就搜不到結果了,但是match query用"Java Core"是可以搜到結果的;

    match_phrase_prefix搜索

    match_phrase_prefix的功能和前面的match_phrase類似,不過match_phrase_prefix支持最后一個詞項做前綴匹配,如下所示,"Core J"這個搜索條件用match_phrase是搜不到結果的,但是match_phrase_prefix可以,因為"J"可以作為前綴和"Java"匹配:

    <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"match_phrase"</span>:<span style="color:#999999">{</span><span style="color:#669900">"title"</span><span style="color:#c678dd">:</span><span style="color:#669900">"Core J"</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    multi_match搜素

    multi_match是在match的基礎上支持多字段搜索,以下查詢就是用"1986"和"deep"這兩個詞項,同時搜索title和description兩個字段:

    <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"multi_match"</span>:<span style="color:#999999">{</span><span style="color:#669900">"query"</span><span style="color:#c678dd">:</span><span style="color:#669900">"1986 deep"</span>,<span style="color:#669900">"fields"</span>:<span style="color:#999999">[</span><span style="color:#669900">"title"</span>, <span style="color:#669900">"description"</span><span style="color:#999999">]</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    響應如下,可見title和description中含有詞項"1986"或者"deep"的文檔都被返回了:

    <span style="color:#000000"><code class="language-json"><span style="color:#999999">{</span><span style="color:#669900">"took"</span><span style="color:#999999">:</span> <span style="color:#98c379">4</span><span style="color:#999999">,</span><span style="color:#669900">"timed_out"</span><span style="color:#999999">:</span> <span style="color:#56b6c2">false</span><span style="color:#999999">,</span><span style="color:#669900">"_shards"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"successful"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"skipped"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#669900">"failed"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">2</span><span style="color:#999999">,</span><span style="color:#669900">"max_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">0.79237825</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">[</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"2"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">0.79237825</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"2"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Compilers"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"c"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Alfred V.Aho"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">62.5</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2011-01-01"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"In the time since the 1986 edition of this book, the world of compiler designhas changed significantly."</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"1"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">0.2876821</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"1"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Deep Learning"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"python"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Yoshua Bengio"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">549</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2016-11-18"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"written by three experts in the field, deep learning is the only comprehensive book on the subject."</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">]</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    terms query

    terms是term查詢的升級,用來查詢多個詞項:

    <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"terms"</span>:<span style="color:#999999">{</span><span style="color:#669900">"title"</span>:<span style="color:#999999">[</span><span style="color:#669900">"deep"</span>, <span style="color:#669900">"core"</span><span style="color:#999999">]</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    響應如下,title中含有deep和core的文檔都被查到:

    <span style="color:#000000"><code class="language-json"><span style="color:#999999">{</span><span style="color:#669900">"took"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"timed_out"</span><span style="color:#999999">:</span> <span style="color:#56b6c2">false</span><span style="color:#999999">,</span><span style="color:#669900">"_shards"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"successful"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"skipped"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#669900">"failed"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">2</span><span style="color:#999999">,</span><span style="color:#669900">"max_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">[</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"1"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"1"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Deep Learning"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"python"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Yoshua Bengio"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">549</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2016-11-18"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"written by three experts in the field, deep learning is the only comprehensive book on the subject."</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"3"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"3"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Core Java"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"java"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Horstmann"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">85.9</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2016-06-01"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"The book is aimed at experienced programmers who want to learn how to write useful Java applications and applets. "</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">]</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    范圍查詢

    range query是范圍查詢,例如查詢publish_time在"2016-01-01"到"2016-12-31"之間的文檔:

    <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"range"</span>:<span style="color:#999999">{</span><span style="color:#669900">"publish_time"</span>:<span style="color:#999999">{</span><span style="color:#669900">"gte"</span><span style="color:#c678dd">:</span><span style="color:#669900">"2016-01-01"</span>,<span style="color:#669900">"lte"</span><span style="color:#c678dd">:</span><span style="color:#669900">"2016-12-31"</span>,<span style="color:#669900">"format"</span><span style="color:#c678dd">:</span><span style="color:#669900">"yyyy-MM-dd"</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    篇幅所限,此處略去返回結果;

    exists query

    exists query返回的是字段中至少有一個非空值的文檔:

    <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"exists"</span>:<span style="color:#999999">{</span><span style="color:#669900">"field"</span><span style="color:#c678dd">:</span><span style="color:#669900">"author"</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    前綴查詢

    用于查詢某個字段是否以給定前綴開始:

    <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"prefix"</span>:<span style="color:#999999">{</span><span style="color:#669900">"title"</span><span style="color:#c678dd">:</span><span style="color:#669900">"cor"</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    以上請求可以查到title字段為"Core Java"的文檔:

    <span style="color:#000000"><code class="language-json"><span style="color:#999999">{</span><span style="color:#669900">"took"</span><span style="color:#999999">:</span> <span style="color:#98c379">6</span><span style="color:#999999">,</span><span style="color:#669900">"timed_out"</span><span style="color:#999999">:</span> <span style="color:#56b6c2">false</span><span style="color:#999999">,</span><span style="color:#669900">"_shards"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"successful"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"skipped"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#669900">"failed"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"max_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">[</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"3"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"3"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Core Java"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"java"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Horstmann"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">85.9</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2016-06-01"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"The book is aimed at experienced programmers who want to learn how to write useful Java applications and applets. "</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">]</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    通配符查詢

    以下查詢,可以搜到title字段中含有"core"的文檔,另外需要注意的是,"?“匹配一個字符,”*"匹配零個或者多個字符:

    <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"wildcard"</span>:<span style="color:#999999">{</span><span style="color:#669900">"title"</span><span style="color:#c678dd">:</span><span style="color:#669900">"cor?"</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    正則表達式

    使用屬性regexp可以進行正則表達式查詢,例如查找description字段帶有4位數字的分詞的文檔:

    <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"regexp"</span>:<span style="color:#999999">{</span><span style="color:#669900">"description"</span><span style="color:#c678dd">:</span><span style="color:#669900">"[0-9]{4}"</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    查找結果如下,description字段中帶有數字1986

    <span style="color:#000000"><code class="language-json"><span style="color:#999999">{</span><span style="color:#669900">"took"</span><span style="color:#999999">:</span> <span style="color:#98c379">4</span><span style="color:#999999">,</span><span style="color:#669900">"timed_out"</span><span style="color:#999999">:</span> <span style="color:#56b6c2">false</span><span style="color:#999999">,</span><span style="color:#669900">"_shards"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"successful"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"skipped"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#669900">"failed"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"max_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">[</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"2"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"2"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Compilers"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"c"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Alfred V.Aho"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">62.5</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2011-01-01"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"In the time since the 1986 edition of this book, the world of compiler designhas changed significantly."</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">]</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    模糊查詢(fuzzy query)

    fuzzy是通過計算詞項與文檔的編輯距離來得到結果的,例如查找description字段還有分詞"1986"的時候,不小心輸入了"1987",通過fuzzy查詢也能得到結果,只是得分變低了,請求內容如下所示:

    <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"fuzzy"</span>:<span style="color:#999999">{</span><span style="color:#669900">"description"</span><span style="color:#c678dd">:</span><span style="color:#669900">"1987"</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    搜索到的文檔如下所示,得分只有0.5942837,低于用"1986"查詢的0.79237825:

    <span style="color:#000000"><code class="language-json"><span style="color:#999999">{</span><span style="color:#669900">"took"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"timed_out"</span><span style="color:#999999">:</span> <span style="color:#56b6c2">false</span><span style="color:#999999">,</span><span style="color:#669900">"_shards"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"successful"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"skipped"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#669900">"failed"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"max_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">0.5942837</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">[</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"2"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">0.5942837</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"2"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Compilers"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"c"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Alfred V.Aho"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">62.5</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2011-01-01"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"In the time since the 1986 edition of this book, the world of compiler designhas changed significantly."</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">]</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    需要注意的是,fuzzy查詢時消耗資源較大;

    復合查詢

    常用到的復合查詢是bool query,可以用下表中的條件組合查詢:

    屬性作用
    must必須匹配,相當于SQL中的AND
    should可以匹配,相當于SQL中的OR
    must_not必須不匹配
    filter和must一樣,但是不評分

    以下條件,搜索的是title中帶有java,但是不包含core的文檔:

    <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"bool"</span>:<span style="color:#999999">{</span><span style="color:#669900">"must"</span>:<span style="color:#999999">{</span><span style="color:#669900">"term"</span>:<span style="color:#999999">{</span><span style="color:#669900">"title"</span><span style="color:#c678dd">:</span><span style="color:#669900">"java"</span><span style="color:#999999">}</span> <span style="color:#999999">}</span>,<span style="color:#669900">"must_not"</span>:<span style="color:#999999">[</span><span style="color:#999999">{</span><span style="color:#669900">"term"</span>:<span style="color:#999999">{</span><span style="color:#669900">"title"</span><span style="color:#c678dd">:</span><span style="color:#669900">"core"</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">]</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    得到的文檔中,帶有core詞項的已經被過濾了:

    <span style="color:#000000"><code class="language-json"><span style="color:#999999">{</span><span style="color:#669900">"took"</span><span style="color:#999999">:</span> <span style="color:#98c379">3</span><span style="color:#999999">,</span><span style="color:#669900">"timed_out"</span><span style="color:#999999">:</span> <span style="color:#56b6c2">false</span><span style="color:#999999">,</span><span style="color:#669900">"_shards"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"successful"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"skipped"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#669900">"failed"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"max_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">0.5754429</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">[</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"4"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">0.5754429</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"4"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Thinking in Java"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"java"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Bruce Eckel"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">70.1</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2015-07-06"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"Thinking in Java should be read cover to cover by every Java programmer, then kept close at hand for frequent reference. The exercises are challenging, and the chapter on Collections is superb!"</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">]</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    腳本查詢

    可用腳本進行查詢,如下是查詢價格大于100的所有文檔:

    <span style="color:#000000"><code class="language-shell">GET englishbooks/_search<span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"bool"</span>:<span style="color:#999999">{</span><span style="color:#669900">"must"</span>:<span style="color:#999999">{</span><span style="color:#669900">"script"</span>:<span style="color:#999999">{</span><span style="color:#669900">"script"</span>:<span style="color:#999999">{</span><span style="color:#669900">"inline"</span><span style="color:#c678dd">:</span><span style="color:#669900">"doc['price'].value>500"</span>,<span style="color:#669900">"lang"</span><span style="color:#c678dd">:</span><span style="color:#669900">"painless"</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    得到的結果只有price大于500的文檔:

    <span style="color:#000000"><code class="language-json"><span style="color:#999999">{</span><span style="color:#669900">"took"</span><span style="color:#999999">:</span> <span style="color:#98c379">8</span><span style="color:#999999">,</span><span style="color:#669900">"timed_out"</span><span style="color:#999999">:</span> <span style="color:#56b6c2">false</span><span style="color:#999999">,</span><span style="color:#669900">"_shards"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"successful"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"skipped"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#669900">"failed"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"max_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">[</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"1"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"1"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Deep Learning"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"python"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Yoshua Bengio"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">549</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2016-11-18"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"written by three experts in the field, deep learning is the only comprehensive book on the subject."</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">]</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    指定排序字段

    默認的排序方式是按照評分來排序的(也就是相關度排序),可以用sort屬性來設置排序字段,下面的請求指定了按照price字段降序排序:

    <span style="color:#000000"><code class="language-shell"><span style="color:#999999">{</span><span style="color:#669900">"query"</span>:<span style="color:#999999">{</span><span style="color:#669900">"term"</span>:<span style="color:#999999">{</span><span style="color:#669900">"title"</span><span style="color:#c678dd">:</span><span style="color:#669900">"java"</span><span style="color:#999999">}</span><span style="color:#999999">}</span>,<span style="color:#669900">"sort"</span>:<span style="color:#999999">[</span><span style="color:#999999">{</span><span style="color:#669900">"price"</span>:<span style="color:#999999">{</span><span style="color:#669900">"order"</span><span style="color:#c678dd">:</span><span style="color:#669900">"desc"</span><span style="color:#999999">}</span><span style="color:#999999">}</span><span style="color:#999999">]</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    得到結果:

    <span style="color:#000000"><code class="language-json"><span style="color:#999999">{</span><span style="color:#669900">"took"</span><span style="color:#999999">:</span> <span style="color:#98c379">4</span><span style="color:#999999">,</span><span style="color:#669900">"timed_out"</span><span style="color:#999999">:</span> <span style="color:#56b6c2">false</span><span style="color:#999999">,</span><span style="color:#669900">"_shards"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"successful"</span><span style="color:#999999">:</span> <span style="color:#98c379">5</span><span style="color:#999999">,</span><span style="color:#669900">"skipped"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#669900">"failed"</span><span style="color:#999999">:</span> <span style="color:#98c379">0</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"total"</span><span style="color:#999999">:</span> <span style="color:#98c379">2</span><span style="color:#999999">,</span><span style="color:#669900">"max_score"</span><span style="color:#999999">:</span> <span style="color:#c678dd">null</span><span style="color:#999999">,</span><span style="color:#669900">"hits"</span><span style="color:#999999">:</span> <span style="color:#999999">[</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"3"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#c678dd">null</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"3"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Core Java"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"java"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Horstmann"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">85.9</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2016-06-01"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"The book is aimed at experienced programmers who want to learn how to write useful Java applications and applets. "</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#669900">"sort"</span><span style="color:#999999">:</span> <span style="color:#999999">[</span><span style="color:#98c379">85.9</span><span style="color:#999999">]</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#999999">{</span><span style="color:#669900">"_index"</span><span style="color:#999999">:</span> <span style="color:#669900">"englishbooks"</span><span style="color:#999999">,</span><span style="color:#669900">"_type"</span><span style="color:#999999">:</span> <span style="color:#669900">"IT"</span><span style="color:#999999">,</span><span style="color:#669900">"_id"</span><span style="color:#999999">:</span> <span style="color:#669900">"4"</span><span style="color:#999999">,</span><span style="color:#669900">"_score"</span><span style="color:#999999">:</span> <span style="color:#c678dd">null</span><span style="color:#999999">,</span><span style="color:#669900">"_source"</span><span style="color:#999999">:</span> <span style="color:#999999">{</span><span style="color:#669900">"id"</span><span style="color:#999999">:</span> <span style="color:#669900">"4"</span><span style="color:#999999">,</span><span style="color:#669900">"title"</span><span style="color:#999999">:</span> <span style="color:#669900">"Thinking in Java"</span><span style="color:#999999">,</span><span style="color:#669900">"language"</span><span style="color:#999999">:</span> <span style="color:#669900">"java"</span><span style="color:#999999">,</span><span style="color:#669900">"author"</span><span style="color:#999999">:</span> <span style="color:#669900">"Bruce Eckel"</span><span style="color:#999999">,</span><span style="color:#669900">"price"</span><span style="color:#999999">:</span> <span style="color:#98c379">70.1</span><span style="color:#999999">,</span><span style="color:#669900">"publish_time"</span><span style="color:#999999">:</span> <span style="color:#669900">"2015-07-06"</span><span style="color:#999999">,</span><span style="color:#669900">"description"</span><span style="color:#999999">:</span> <span style="color:#669900">"Thinking in Java should be read cover to cover by every Java programmer, then kept close at hand for frequent reference. The exercises are challenging, and the chapter on Collections is superb!"</span><span style="color:#999999">}</span><span style="color:#999999">,</span><span style="color:#669900">"sort"</span><span style="color:#999999">:</span> <span style="color:#999999">[</span><span style="color:#98c379">70.1</span><span style="color:#999999">]</span><span style="color:#999999">}</span><span style="color:#999999">]</span><span style="color:#999999">}</span> <span style="color:#999999">}</span> </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    以上就是常用的搜索操作了,至此,《elasticsearch實戰三部曲》系列就全部完成,三篇文章列舉的是一些常用的基本操作,希望能幫助讀者您快速熟悉elasticsearch,后面咱們再一起深入實戰;

    總結

    以上是生活随笔為你收集整理的elasticsearch实战三部曲之三:搜索操作的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 华人永久免费视频 | 逼特逼视频在线观看 | 伊人国产女 | 亚洲国产成人精品久久 | 一区二区三区av | 风韵丰满熟妇啪啪区老熟熟女 | 国产一级特黄aaa大片 | 日韩色图片 | 国产在线视频一区 | 麻豆视频免费在线观看 | 日韩大片在线 | 亚洲日日日 | 黄网站色视频免费观看 | 日本黄页网址 | 欧美高清视频一区 | 日本中文字幕观看 | 精品中文字幕av | 久久久久亚洲av成人人电影 | 久久久黄色大片 | 国内福利视频 | 伊人久久成人网 | 欧美国产日韩在线 | 少妇无码一区二区三区免费 | 97超碰超碰| av鲁丝一区鲁丝二区鲁丝 | h视频免费在线观看 | 成人免费视频国产免费麻豆 | 成人免费在线播放 | 日韩 欧美 亚洲 国产 | 欧美日韩在线免费看 | 日韩av在线中文字幕 | 国产日本一区二区 | 亚洲毛片在线免费观看 | 日韩一区二区不卡 | 国产在线黄色 | 秋霞福利片 | 欧美日韩在线免费观看 | 91亚洲精华国产精华精华液 | 欧美一级网址 | 日韩精品电影网 | 色99999| 国产八区 | 亚洲天堂网在线视频 | 99er在线观看 | 91黄色大片 | 男人天堂a | 国产不卡在线视频 | 在线观看 亚洲 | 男生操女生在线观看 | 成人免费视频国产免费网站 | 深夜视频在线播放 | 97av视频 | 奇米第四色影视 | 好看的中文字幕电影 | 国产精品揄拍100视频 | 丁香五香天堂 | 男人懂得网站 | 欧美三级手机在线观看 | 亚洲成人精品在线观看 | 三级av网 | 成年人黄色片网站 | 亚洲图片 自拍偷拍 | 99国产精品久久久久久久久久久 | 天天干干天天 | 久久精品国产亚洲av久一一区 | 国产中年熟女高潮大集合 | 亚洲少妇在线 | 久久久视屏 | 国产欧美一区二区三区另类精品 | 日日夜夜爱爱 | 胖女人毛片| 麻豆影音 | 亚洲精品污一区二区三区 | 久久色资源网 | 国产精品视频1区 | 黄色国产一区二区 | 51国产偷自视频区视频 | 五月婷婷丁香六月 | 卡一卡二视频 | 九九视频这里只有精品 | 一级免费a | 无码人妻精品一区二区蜜桃网站 | 中文字幕免费视频观看 | 国产成人无码精品 | 综合精品| 伊人青青草 | 91色在线观看 | 韩国精品一区二区 | 国产精品区在线观看 | 毛片日韩 | 在线免费观看污视频 | 一本色道久久综合亚洲二区三区 | 国内精品国产成人国产三级 | 免费看91的网站 | 日韩亚洲欧美在线 | 国产欧美日韩精品在线观看 | 污片免费看 | 精品少妇一区二区三区密爱 | 激情爱爱网 |