2016-07-20

elastic search 小技巧 - Head plugin



很多人說 elastic search 簡單, 好用
那是對聰明人說的
對於我們這種愚笨慢飛型的人呢就覺得太複雜

所以 haystack 就出來解決我的難題了 =>  haystack 包 elastic,   elastic 包  lucene 

可是 haystack 用久了反而覺得 haystack 太過於簡單, 他包太深
於是又想自己動手直接玩 elastic


安裝小工具讓你事半工倍
如果你跟我一樣你一定會想知道怎麼跟 elastic 聊天
這個工具你一定要裝,
 https://mobz.github.io/elasticsearch-head/

因為 elastic 官網一堆 json code 都用 curl 指令
$ curl -XPOST 'http://localhost:9200/twitter/tweet?routing=kimchy' -d '{
    "user" : "kimchy",
    "postDate" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}
'


太麻煩了,
若你裝了 head , 你就可以直接在 複合查詢裡直接下指令
非常方便

如下圖, 這就是我測試搜尋的方法

瞭解 haystack 的101招
當你下這個 haystack 指令搜尋時
SearchQuerySet().models(article).filter(name2='直播是先前有計畫要做的').filter(status=0)

其實它是轉成底下這樣子的 json  指令去搜尋的 (一定要用雙引號),

{
  "query": {
    "filtered": {
      "filter": {
        "terms": {
          "django_ct": [
            "article.article"
          ]
        }
      },
      "query": {
        "query_string": {
          "fuzzy_min_sim": 0.5,
          "default_field": "name2",
          "default_operator": "or",
          "analyze_wildcard": 1,
          "auto_generate_phrase_queries": "true",
          "query": "((直播是先前有計畫要做的) AND status:(0))",
          "fuzzy_max_expansions": 50
        }
      }
    }
  }
}



這就是 elastic 的 query_string, 而 haystack 的 filter 就是用這一招
auto_generate_phrase_queries 是一個很奇妙的參數, 
>有了 head 你就可以任意的拆解, 測試
甚至最後修改 haystack 的 code 讓你的搜尋更能最佳化, 
不再卡卡的, 不再搜尋出不是你想要的東西
  
幾個指令

1.查詢 settings
當你的資料輸入搜尋的 INDEX 時它是長什麼樣子你好奇嗎?
指令: _settings























2. 驗證你的查詢對搜尋引擎來講是怎麼處理的
很好用, 你一定要會, 網路教人用這招的很少

指令: _validate/query?explain



查看右邊視窗你可以看到 elastic 是怎麼 "分詞" 的

但最大作用就是你可以分析輸入的查詢字串與輸出的結果為什麼不是預想的結果
這是搞搜尋的人最想知道的事