Elasticsearch 使用

1. Elasticsearch docker 單節點部署

  • docker search elasticsearch
  • docker pull elasticsearch:7.3.2
  • docker run
docker run -d -e discovery.type="single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" --name=es_test --net=host elasticsearch:7.3.2
  • docker exec -it es_test bash 進入容器ps -ef 獲取ps -aux 查看elasticsearch是否啓動
  • curl 127.0.0.1:9200 不報錯出現詳細信息即啓動成功
{
  "name" : "22d60c25bf5c",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "orRZSvTlSTypHnp2evvJkQ",
  "version" : {
    "number" : "7.2.0",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "508c38a",
    "build_date" : "2019-06-20T15:54:18.811730Z",
    "build_snapshot" : false,
    "lucene_version" : "8.0.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

2. restful api 使用

  • 建立索引node

    curl -XPUT "127.0.0.1:9200/索引名稱?pretty"
    • pretty,參數告訴elasticsearch,返回形式打印JSON結果
      return:
    {
      "acknowledged" : true,
      "shards_acknowledged" : true,
      "index" : "索引名稱"
    }
  • 查看當前全部索引docker

    curl 127.0.0.1:9200/_cat/indices?v
  • 新建文檔api

    curl -XPUT 127.0.0.1:9200/索引名稱/type/id?pretty -d '{"name":"lucy"}'
  • 查看單個文檔,根據文檔id和類型bash

    curl -XPUT 127.0.0.1:9200/索引名稱/type/id?pretty
  • 搜索restful

    • get
    # 查看全部下全部文檔
    curl "127.0.0.1:9200/索引名稱/_search?pretty"
    # 查詢整個庫
    curl "127.0.0.1:9200/_search?q=字段名:須要查找的內容"
    curl "127.0.0.1:9200/_search?q=lucy&df=name"
    # 指定索引下查詢    
    curl "127.0.0.1:9222/索引名稱/_search?q=name:lucy"
    curl "127.0.0.1:9222/索引名稱/_search?q=lucy&df=name"
    # 指定索引以及type下查詢
    curl "127.0.0.1:9222/索引名稱/type/_search?q=name:lucy"
    curl "127.0.0.1:9222/索引名稱/type/_search?q=lucy&df=name"
    • post
    # 查看全部下全部文檔
    curl -XPOST "127.0.0.1:9200/索引名稱/_search?pretty" -d '{"query":{"match_all":{}}}'
    # 查詢整個庫
    curl "127.0.0.1:9200/_search?pretty" -d '{"query":{"term":{字段名:內容}}}'
    exp:  curl "127.0.0.1:9200/_search?pretty" -d '{"query":{"term":{"name":"lucy"}}}' # 檢索name字段爲lucy的文檔 
    # 指定索引下查詢    
    curl "127.0.0.1:9200/索引名稱/_search?pretty" -d '{"query":{"term":{字段名:內容}}}'
    exp:  curl "127.0.0.1:9200/索引名稱/_search?pretty" -d '{"query":{"term":{"name":"lucy"}}}' # 檢索name字段爲lucy的文檔 
    # 指定索引以及type下查詢
    curl "127.0.0.1:9200/索引名稱//type/_search?pretty" -d '{"query":{"term":{字段名:內容}}}'
    exp:  curl "127.0.0.1:9200/索引名稱//type/_search?pretty" -d '{"query":{"term":{"name":"lucy"}}}' # 檢索name字段爲lucy的文檔 
    
    body:
    # 全查詢
    {
       "query":
    {
    	   "match_all":{}
        }
    }
    # 指定條件查詢
    {    
    "query":
        {
        "term":
           	{
    	"字段名":"檢索內容"
    	}
        }
            "sort":{"字段名稱":{"order":"desc"}}, # 排序,按照指定字段排序,該字段必須爲可排序字段類型
            "_source":["字段名稱","字段名稱"], # 只返回指定字段內容
            "from":int, # 指定文檔索引從哪開始,默認爲0
            "size":int  # 返回文檔個數,默認爲10
    }

3. 詳解檢索時term和match的區別

  • term
    代碼徹底匹配,文檔必須包含整個搜索的詞彙,不會進行分詞
    使用term要看查詢字段是否analyzed,默認是被分析的
    exp: 一句話存儲時被分析過的結果存儲的爲詞,若是not_analyzed存儲整句話內容,當使用整句話徹底匹配時,被分析過的結果沒法匹配出來
  • match 匹配時會對查詢內容先分詞
    1. match 返回全部只要包含查詢詞中任意單詞的文檔
    {"query":
        {
            "match":{字段名:{"query":查詢匹配內容}}
        }
    }
    1. match_phrase 徹底匹配,可經過slop參數調節少匹配單詞個數,自定義匹配
    {
    "query":
        {
            "match_phrase":
    	{
                "字段名":
                        {
    		"query":查詢匹配內容,
    		"slop":2 # 能夠少匹配個數
                        }
                }
        }
    }
    1. multi_match 多個字段進行匹配,只要其中一個字段知足便可
    {
        "query":
        {
         "multi_match":
            {
            "query":查詢匹配內容,
            "fields":["字段一","字段二"]
    	}
        }
    }
相關文章
相關標籤/搜索