1. 程式人生 > 實用技巧 >Elasticsearch 學習

Elasticsearch 學習

ik 分詞器

先下載 ik 分詞器 放到Elasticsearch 的 plugins 的ik z中

  1. ik_max_word 最細粒度
  2. ik_smart 最小拆分

ik 分詞器配置

​ IKAnalyzer.cfg.xml 配置分詞規則

  1. 自定義自己分詞規則

    • 新建 xx.dic 檔案

    • 配置到IKAnalyzer.cfg.xml

      <entry key="ext_dict">xx.dic</entry>
      
    • 把自己的分詞規則放到 xx.dic 檔案中

索引基本操作

mothod url 地址 描述
PUT localhost:9200/索引名稱/型別名稱/文件id 建立文件(指定文件id)
POST localhost:9200/索引名稱/型別名稱 建立文件(隨機文件id)
POST localhost:9200/索引名稱/型別名稱/文件id/_update 修改文件
DELETE localhost:9200/索引名稱/型別名稱/文件id 刪除文件
GET localhost:9200/索引名稱/型別名稱/文件id 查詢文件通過文件id
POST localhost:9200/索引名稱/型別名稱/_search 查詢所有資料

建立索引

put /索引名稱/型別名/文件id {請求資料}

Elasticsearch 字元型別

  1. 字串型別 text keyword
  2. 數值型別 long integer short byte double float half float scaled
  3. 日期型別 date
  4. 布林值型別 boolen
  5. 二進位制型別 binary
  6. 等等...

指定型別

先新建索引
put  /索引名稱/型別名/文件id {
    "mapping":{
        "properties":{
            "欄位名稱":{
                "type":"型別"
            }
        }
    }
}

獲取資料資訊 Get

​ get 表/文旦 等

預設指定型別 _doc

_cat 它幫助開發者快速查詢Elasticsearch的相關資訊。

修改資料put/update (曾經) post(現在)

刪除 delete

例子 :PUT /test/vus/1 
{
  "name":"什麼說的好的",
  "age":"20"
}

文件的基本操作

基本操作

查詢

GET /索引名稱/型別名稱/文件id(有沒有都可以)/_search?q=條件(如name:java)

結果裡面有個score 匹配度 就是匹配度越高分值越高

複雜操作

查詢 (排序 高亮 )

GET /索引名稱/型別名稱/文件id(有沒有都可以)/_search
{
  "query":{
        "match":{
            條件(例如 "name":"java")
        } 
   },
  "_source":[要查詢的欄位(意思是篩選欄位)],
  "sort":{
	欄位(根據那個欄位排序):{
		"order":"desc/aesc"
     }
  },
--分頁
  "from":0, //從那條資料開始
  "size":20 //一頁有幾條資料
}

根據score 那個更匹配

布林值查詢

GET /索引名稱/型別名稱/文件id(有沒有都可以)/_search
{
  "query":{
        "bool":{
        	"must"( 中有filter/must/must not /should):[
        		{ 
                    "match":
                        {
                            條件("name":"java")
                        },
                     "match":
                        {
                            條件("age":"20")
                        },
                        ........
                
                }
        	],
            "filter"( 中有filter/must/must not /should):[
                        { 
                            "range":
                                {
                                    條件("age"):{
									"gle":"",  //大於等於多少gl是大於
									 "lte":""  //小於等於多少lt是小於
                                     }
                                }
                        }
            ]
        } 
   }
}

must 和sql 中 where 中and相同

should 和where中or相同

mast not 是不等於

匹配多個條件

GET /索引名稱/型別名稱/文件id(有沒有都可以)/_search
{
  "query":{
        "match":{
            條件加空格(例如 "name":"java php" 這是隻要滿足一個條件就可以查出來)
        } 
   }

}

精確查詢

  • term 查詢是直接通過倒排索引指定的詞條程序精確的查詢(直接查詢精確的值 查詢多個值的時候需要重新寫個term 不能直接加空格)

  • match 會使用分詞器解析(通過分析文件 然後在通過分析文件進行查詢)

兩個型別 text和keyword text可以用分詞器解析keyword 不會用分詞器解析

高亮查詢

GET /索引名稱/型別名稱/文件id(有沒有都可以)/_search
{
  "query":{
        "match":{
            條件(例如 "name":"java")
        } 
   },
   "highlight":{ //高亮
       "pre_tags":自定義標籤字首,(如"<B class="hah">")
       "post_tags":自定義的字尾,(如 "</B>")
       "fields":{
       	  欄位:{}  //高亮的欄位
       }
   } 
}

搜尋的結果自動加上一個html標籤 或者自定義的標籤