ElasticSearch的幾種檢索方式

主要分爲以下幾種:

1、query string search :查詢字符串搜索
2、query DSL :特定領域的語言
3、query filter : 過濾查詢
4、full-text search :(全文檢索)
5、phrase search :(短語搜索)
6、highlight search :(高亮搜索)

有那些不懂的可以查看《Elasticsearch 權威指南》:https://www.elastic.co/guide/cn/elasticsearch/guide/current/term-vs-full-text.html

搜索全部數據

http://localhost:9200/_search

took:耗費了幾毫秒
timed_out:是否超時,這裏是沒有
_shards:數據拆成了5個分片,所以對於搜索請求,會打到所有的primary shard(或者是它的某個replica shard也可以)
hits.total:查詢結果的數量,3個document
hits.max_score:score的含義,就是document對於一個search的相關度的匹配分數,越相關,就越匹配,分數也高
hits.hits:包含了匹配搜索的document的詳細數據

查詢索引下面的所有數據

http://localhost:9200/articleindex/_search

 

1.query string search的由來是因爲,因爲search參數都是以http請求query string 來附帶參數的

比如搜索商品名稱包含“歐尼傑夏季修身休閒褲男運動休閒簡約薄款長褲男士”

http://localhost:9200/goods/goodslist/_search?q=name:歐尼傑夏季修身休閒褲男運動休閒簡約薄款長褲男

 

2、query DSL :Domain Specified Language,特定領域的語言

http request body:請求體,可以用json的格式來構建查詢語法,比較方便,可以構建各種複雜的語法,比起第一種還是強大很多。

比如查詢所有商品:

http://localhost:9200/goods/goodslist/_search

"query": { "match_all": {} }   //查詢所有

body:

{
    "query":{
        "match":{
            "name":"歐尼傑夏季修身休閒褲男運動休閒簡約薄款長褲男士"
        }
    },
    "sort": [
        { "price": "desc" }
        
    ]
}

返回的查詢信息如下:

分頁查詢:總共3條商品,假設每頁就顯示1條商品,現在顯示第2頁,所以就查出來第2個商品

{
  "query": { "match_all": {} },
  "from": 1,
  "size": 1
}

查詢顯示商品名字和價格字段數據:

{
    "query":{
        "match_all":{}
    },
    "_source":["name","price"]
}

 

3.query filter

搜索商品等於歐尼傑夏季修身休閒褲男運動休閒簡約薄款長褲男士 並且價格大於50元的商品

“bool”:代表布爾查詢:https://www.cnblogs.com/xing901022/p/5994210.html 詳解

postman只能post可以寫body;

http://localhost:9200/goods/goodslist/_search

body:

{
    "query":{
        "bool":{
            "must":{
                "match":{
                    "name":"歐尼傑夏季修身休閒褲男運動休閒簡約薄款長褲男士"
                }
            },
            "filter":{
                "range":{
                    "price":{"gt":"50"}
                }
            }
        }
    }
}

在這裏寫下自己的理解must:它由一個或者多個子句組成,每個子句都有特定的類型。字句中的條件必須滿足,

返回的文檔必須滿足must子句的條件,並且參與計算分值。

 

4、full-text search(全文檢索)

http://localhost:9200/goods/goodslist/_search

body:

{
    "query" : {
        "match" : {
            "name" : "歐尼傑夏季修身休閒褲男運動休閒簡約薄款長褲男士"
        }
    }
}

name:這個裏面的搜索項會被拆開一個一個的去倒排索引裏賣弄一一匹配,只要能匹配上任意一個拆解後的單詞就可以作爲搜索結果返回。

5、phrase search(短語搜索)

跟全文檢索相對應,
phrase search,要求輸入的搜索串,必須在指定的字段文本中,完全包含一模一樣的,纔可以算匹配,才能作爲結果返回

http://localhost:9200/goods/goodslist/_search
{
    "query" : {
        "match_phrase" : {
            "name" : "歐尼傑夏季修身休閒褲男運動休閒簡約薄款長褲男士"
        }
    }
}

只有一條是匹配的。

 

 


6、highlight search(高亮搜索結果)

http://localhost:9200/goods/goodslist/_search

{
    "query" : {
        "match" : {
            "name" : "歐尼傑夏季修身休閒褲男運動休閒簡約薄款長褲男士"
        }
    },
    "highlight": {
        "fields" : {
            "name" : {}
        }
    }
}

 

*局部跟新

例子:

PUT http://localhost:9200/test_index/test_type/10
{
  "test_field1": "test1",
  "test_field2": "test2"
}

POST http://localhost:9200/test_index/test_type/10/_update
{
  "doc": {
    "test_field2": "updated test2"
  }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章