elasticsearch入門筆記(1)

Feb 25, 2012  

角色關係對照

elasticsearch 跟 MySQL 中定義資料格式的角色關係對照表如下

MySQLelasticsearch
database index
table type
table schema mapping
row document
field field

設定檔與目錄配置

參考:

建立 index

curl -XPUT 'http://localhost:9200/my_index_name/' 這邊的 my_index_name 就是要被建立的 index 的名字

設定 index

curl -XPUT 'localhost:9200/my_index_name/_settings' -d '
{
    "index" : {
        "number_of_replicas" : 4
    }
}
'

可以設定的參數在 這頁

建立 type 與 mapping

在預設的情況下 elasticsearch 會自動建立 type 跟 mapping, 但是我會建議自行定義 mapping 的內容, 因為這樣可以做出比較符合需求的設定,例如不同的欄位要使用不同的分詞方式

下面的範例中 my_index_name, my_type_name, my_field_name 都是自己命名的

curl -XPUT 'http://localhost:9200/my_index_name/my_type_name/_mapping' -d '
{
    "my_type_name" : {
        "properties" : {
            "my_field_name" : {"type" : "string", "store" : "yes"},
            "my_field_name2" : {"type" : "string", "store" : "yes"},
            "my_field_name3" : {"type" : "date", "store" : "yes"}
        }
    }
}
'

每個欄位的定義, 會像是 "my_field_name" : {"type" : "string", "store" : "yes"} 這樣子, 常用的欄位格式定義可以參考這頁

建立搜尋資料

curl -XPOST 'localhost:9200/my_index_name/my_type_name/1' -d ' 
{
    "my_field_name" : "test",
    "my_field_name2": "test2",
    "my_fidle_name3": "2012-02-1"
}
'

my_index_name/my_type_name/1 中的1代表的是這比資料的id, 建議寫入資料庫裏面的 primaty key, 如果沒有設定的話, 會自動產生像是EYQqF6eyTJGJ-6aZiIYZsg的內容

搜尋資料

curl -XPOST 'localhost:9200/my_index_name/my_type_name/_search' -d '
{ 
    "query":{ 
        "text":{ "_all":"test"}
    }
}
'

詳細搜尋的語法需參考這頁