Elasticsearch深入搜索與查詢語言介紹DSL

Elasticsearch兩種查詢

  1. url 搜索 e.g. GET twitter/_search?q=user:kimchy
  2. DSL查詢語言
    GET /_search
    {
    "query": { 
        "bool": { 
        "must": [
            { "match": { "title":   "Search"        }}, 
            { "match": { "content": "Elasticsearch" }}  
        ],
        "filter": [ 
            { "term":  { "status": "published" }}, 
            { "range": { "publish_date": { "gte": "2015-01-01" }}} 
        ]
        }
    }
    }

DSL(Domain Specific Language)

基本語法

GET /_search
{
    "query": <query clause>
}

查詢分類

  • 根據(jù)目的分類
    • 上下文查詢(Query context),簡稱查詢
      在上下文查詢語境中,查詢語句會詢問文檔與查詢語句的匹配程度涛癌,此外,它會判斷文檔是否匹配并計算相關(guān)性評分(_score)的值势腮。
    • 上下文過濾(Filter context),簡稱過濾
      在上下文過濾語境中漫仆,查詢語句主要解決文檔是否匹配的問題捎拯,而不會在意匹配程度(相關(guān)性評分)。過濾主要用于結(jié)構(gòu)化的數(shù)據(jù)盲厌。
  • 根據(jù)查詢語句分類
    葉子查詢語句 : 用于查詢特殊字段的特殊值署照,例如:match, term, range 等。
    復(fù)合查詢語句 : 可以合并其他的葉子查詢或復(fù)合查詢吗浩,從而實現(xiàn)非常復(fù)雜的查詢邏輯建芙。

查詢語法

1. 全文查詢


GET /_search
{
    "query" : {
        "match" : {
            "full_name" : "John Smith"
        },
        "multi_match": {
          "query": "John Smith",
          "fields": ["first_name", "full_name"]
        }
    }
}
  • match: 查詢可操作文本、數(shù)值和日期類型的數(shù)據(jù)懂扼,分析它們并構(gòu)建查詢語句禁荸。
  • match_phrase: 即短語(詞組)匹配,它會分析提供的查詢文本并構(gòu)建一個 phrase 查詢阀湿。
  • match_phrase_prefix: 和 match_phrase 類似赶熟,但 match_phrase_prefix 不是精準(zhǔn)匹配,而是前綴匹配陷嘴,它會對查詢文本的最后一個字符后的內(nèi)容進(jìn)行通配符搜索映砖。
  • multi_match: 用于多字段匹配查詢。

2. Term-level 查詢

Term-level 查詢是直接查詢倒排索引中的確切的值灾挨。
Term-level 查詢通常用于結(jié)構(gòu)化的數(shù)據(jù)邑退,如數(shù)值竹宋、日期、枚舉值或關(guān)鍵字地技,而不是文本(text)

POST /_search
{
  "query": {
    "term" : { "first_name" : "john" } ,
    "terms" : { "full_name" : ["john", "john2"] },
    "range" : {
            "info.age" : {
                "gte" : 28,
                "lt" : 60,
                "boost" : 2.0
            }
        },
    "wildcard" : { "full_name" : "john*" },
    "regexp" : { "full_name" : "jo.*" },
     "type" : {
            "value" : "user"
        }

  }
}
  • term 用于查詢指定字段的倒排索引包含某個確切值的記錄逝撬。
  • terms 和 term 類似,只不過提供的確切的值是數(shù)組乓土。類似于 MySQL 的 in 條件。
  • range 用于范圍查詢溯警。
  • exists 返回字段值不為 null 的記錄趣苏。
  • prefix 返回字段的 term 以確切的前綴(前綴不會被分析)開頭的記錄。
  • wildcard 指的是通配符查詢梯轻。支持的通配符主要有:(* 匹配 0 個或多個任意字符, ? 匹配 1 個任意字符)
  • regexp 指的是正則查詢食磕。
  • fuzzy 指的是容差查詢,即可以容忍確切的值和倒排索引中的 term 之間有誤差喳挑。
  • type 查詢指的是根據(jù)文檔的 type 來查詢彬伦。
  • ids 查詢指的是根據(jù)文檔的 id 來查詢。

3. 復(fù)合查詢


GET /_search
{
    "query": {
        "constant_score" : {
            "filter" : {
                "term" : { "full_name" : "john"}
            },
            "boost" : 1.5
        }
    }
}
  • constant_score 復(fù)合查詢只會在過濾上下文中執(zhí)行查詢語句伊诵,并且返回的所有的記錄的 _score 值是一個常量单绑。
  • bool 復(fù)合查詢用于組合葉子查詢語句或復(fù)合查詢語句。如:must, should, must_not, or filter曹宴。
    • must 必須匹配搂橙。
    • should 至少匹配一個文檔。
    • filter 必須匹配笛坦,忽略相關(guān)性評分区转。
    • must_not 必須不匹配,忽略相關(guān)性評分版扩。
    • 說明: must 和 should 在查詢上下文中執(zhí)行废离;must_not 和 filter 在過濾上下文中執(zhí)行。

POST /_search
{
    "query": {
        "bool" : {
            "must" : {
              "term" : { "last_name" : "smith" }
            },
            "filter": {
              "term" : { "info.interests" : "musics" }
            },
            "must_not" : {
              "range" : {
                "info.age" : { "gte" : 10, "lte" : 25 }
              }
            },
            "should" : [
              { "term" : { "full_name" : "john" } },
              { "term" : { "full_name" : "smith" } }
            ],
            "minimum_should_match" : 1,
            "boost" : 2.0
        }
    }

參考:https://blog.csdn.net/lamp_yang_3533/article/details/97618687

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末礁芦,一起剝皮案震驚了整個濱河市蜻韭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宴偿,老刑警劉巖湘捎,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異窄刘,居然都是意外死亡窥妇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門娩践,熙熙樓的掌柜王于貴愁眉苦臉地迎上來活翩,“玉大人烹骨,你說我怎么就攤上這事〔男梗” “怎么了沮焕?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拉宗。 經(jīng)常有香客問我峦树,道長,這世上最難降的妖魔是什么旦事? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任魁巩,我火速辦了婚禮,結(jié)果婚禮上姐浮,老公的妹妹穿的比我還像新娘谷遂。我一直安慰自己,他們只是感情好卖鲤,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布肾扰。 她就那樣靜靜地躺著,像睡著了一般蛋逾。 火紅的嫁衣襯著肌膚如雪集晚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天换怖,我揣著相機(jī)與錄音甩恼,去河邊找鬼。 笑死沉颂,一個胖子當(dāng)著我的面吹牛条摸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铸屉,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼钉蒲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了彻坛?” 一聲冷哼從身側(cè)響起顷啼,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎昌屉,沒想到半個月后钙蒙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡间驮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年躬厌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竞帽。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡扛施,死狀恐怖鸿捧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情疙渣,我是刑警寧澤匙奴,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站妄荔,受9級特大地震影響泼菌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜啦租,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一灶轰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧刷钢,春花似錦、人聲如沸乳附。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赋除。三九已至阱缓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間举农,已是汗流浹背荆针。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留颁糟,地道東北人航背。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像棱貌,于是被迫代替她去往敵國和親玖媚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容