日韩性视频-久久久蜜桃-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实战三部曲之三:搜索操作的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 91精品婷婷国产综合久久竹菊 | 男人插女人免费视频 | 亚色成人 | 啪网站| 精品无码久久久久久久久成人 | 亚洲精品自拍偷拍 | 免费国产黄 | 337p粉嫩色噜噜噜大肥臀 | 丰满肉嫩西川结衣av | 99久久99久久精品国产片果冰 | 国产免费无码一区二区视频 | 男女草逼网站 | 韩国女主播一区二区 | 欧美bbw视频| 免费乱淫视频 | 日韩丰满少妇无码内射 | 伦理av在线 | 亚洲精品天堂网 | a天堂视频 | 成人在线超碰 | 日韩精品国产一区 | 亚洲女同志亚洲女同女播放 | 2022国产精品 | 成年人在线免费观看 | 亚洲一区,二区 | 少妇一级淫片免费放播放 | 一本色道久久88加勒比—综合 | 久久丁香| 奴性女会所调教 | 欧美丝袜一区二区三区 | 欧美三级视频在线观看 | 日本激情一区二区三区 | 欧美最猛黑人xxxx | 久久99伊人 | 国产精品theporn | 国产精品国产三级国产专播品爱网 | 99久久综合国产精品二区 | 国产裸体永久免费视频网站 | 精品999视频| 日韩日日日 | 涩涩视频免费在线观看 | 国产美女视频网站 | 粗大挺进潘金莲身体在线播放 | 99999精品视频 | 98成人网 | 好男人影视www | 亚洲精品一区二区三区蜜臀 | 国产欧美日韩在线 | 国产www免费 | 国产99在线视频 | 狠狠干免费视频 | 理论片第一页 | 久久av不卡| 91香蕉国产 | 男人的天堂视频在线观看 | 色www国产亚洲阿娇 自拍一区在线 | 茄子视频懂你更多在线观看 | 国产精品一区不卡 | 欧美色图首页 | 国产免费激情视频 | 极品粉嫩小仙女高潮喷水久久 | 欧美午夜精品久久久久久浪潮 | 亚洲av无码乱码在线观看性色 | 在线视频第一页 | 久草手机在线视频 | 僵尸叔叔在线观看国语高清免费观看 | 人人草人人爽 | 91人人干| 久久久久免费 | 一级黄大片 | 国语一区二区 | 污片在线看| 亚洲综合色网 | 中文字幕永久视频 | 黄网站在线播放 | 色97 | 神马影院午夜伦理 | 国产亚洲欧美在线视频 | 亚洲成人一区 | 艳妇乳肉豪妇荡乳av无码福利 | 欧美一级精品 | 午夜精品一区二区三区在线播放 | 国产99在线 | 亚洲 | 国产成人精品一区二区三区无码熬 | 亚洲爆乳无码精品aaa片蜜桃 | 国产精成人品 | 日本成人免费视频 | 国产www免费观看 | 国产a免费 | 亚洲区 欧美区 | 日日碰狠狠躁久久躁蜜桃 | 黄色不卡av | 免费在线看黄色片 | 欧美在线视频网站 | 有码一区二区 | 911国产视频 | 男女免费毛片 | 精品久久久蜜桃 | 都市激情麻豆 |