在ElasticSearch中,一個analyzer可以有多個token filters。而這些filters的順序有時會很重要。
這兩天在玩一個案例,我有一自訂的analyzer,其filters定義為 [standard, lowercase, stop, snowball, synonym],並定義 spanning tree protocol 與 stp為synonym,期望當用spanning tree protocol去搜尋時,也能找到內容中也有stp的文章,反之亦然
但是玩了老半天卻一直失敗,用spanning tree protocol一直無法把文章中有stp的documents給找出來
再用其他之前試驗過的同義字卻是可以成功的,顯然ElasticSearch的機制是OK的,但不知在那個環節出了錯
不斷的try-error,不停的思考,總算悟出了道理。filter的順序是 standard -> lowercase -> stop -> snowball -> synonym
用 "spanning tree protocol" 去搜尋時,從standard到stop都還不會有問題,但到了snowball filter時,filter會把spanning轉變為span,這讓我們的query string從"spanning tree protocol"變成"span tree protocol",當再進到synonym filter時,就無法轉變成同義字stp了,所以同義字的搜詢就會失敗
將filter改成[standard, synonym, lowercase, stop, snowball],把順序調者一下,這樣就解決問題了
2013/12/09
2013/11/21
ElasticSearch
ElasticSearch是架構在Apach Lucene上,提供了
可以參考的電子書
http://exploringelasticsearch.com
- 更簡便的設定方式
- distributed, cluster架構
- RESTful介面 (JSON over HTTP)
- schema free
- 依舊是open source (Apache 2)
- 很容易安裝/移除的plugins (就像是apt-get/yum般)
可以參考的電子書
http://exploringelasticsearch.com
2013/11/19
清掉Solr中所有資料
偷空玩Solr,當然照著 Solr Tutorial跑一次,瞭解一下它有那些features,以及熟悉一下它的界面
然後開始要做些正事了,得把之前測試的資料清掉,拜了一下Google,找到了幾種方法,可是怎麼有些是無效或有問題的
最後用了這個,解決!記錄下來,也許未來用得到
http://192.168.10.66:8983/solr/update?commit=true&stream.body=%3Cdelete%3E%3Cquery%3E*:*%3C/query%3E%3C/delete%3E
然後開始要做些正事了,得把之前測試的資料清掉,拜了一下Google,找到了幾種方法,可是怎麼有些是無效或有問題的
最後用了這個,解決!記錄下來,也許未來用得到
http://192.168.10.66:8983/solr/update?commit=true&stream.body=%3Cdelete%3E%3Cquery%3E*:*%3C/query%3E%3C/delete%3E
訂閱:
文章 (Atom)