好久没有搞文章了,最近项目有需求要用分词,最开始想用solr来着,后来领导死活不用,说是用Elasticsearch ,Elasticsearch 有人维护,所以硬着头皮搞了搞。
我是在windows上试验的,用的最新版本的Elasticsearch 2.3,安装和,插件什么的不就说了,
之后到导入mysql数据库的数据到Elasticsearch中,我首先down了一个http://xbib.org/repository/org/xbib/elasticsearch/importer/elasticsearch-jdbc/2.3.1.0/elasticsearch-jdbc-2.3.1.0-dist.zip
然后解压,去到他的bin目录下找到了mysql-simple-example.bat和log4j2.xml 拷贝到了Elasticsearch的bin目录下,打开mysql-simple-example.bat,发现里面的内容无法执行,所以对这个bat进行了修改
修稿后的内容如下
set DIR=%~dp0 set LIB="%DIR%..\elasticsearch-jdbc-2.3.1.0\lib\*" set BIN="%DIR%..\elasticsearch-jdbc-2.3.1.0\bin\*" "E:\jdk1.8.0_77\bin\java" -cp "%LIB%" -Dlog4j.configurationFile=file://%DIR%log4j2.xml "org.xbib.tools.Runner" "org.xbib.tools.JDBCImporter" jdbc_mysql.json
原来的文件中是有一段json的,我把这段代码放到了一个json文件里名字叫jdbc_mysql.json
内容如下:
{ "type": "jdbc", "jdbc": { "url": "jdbc:mysql://ip:3306/database", "user": "root", "password": "root", "sql": "select b.zon_id as _id ,b.zon_nm as zon_nm ,b.zon_shrt_nm as shrt_nm from bus_chinaarea b ", "index": "database", "type": "bus_chinese_1" } }
几个参数,sql里面的 _id 就是去定义Elasticsearh里面的id的不然它会用Elasticsearch自带的id生成方式
index就是索引名称 我定义成数据库名字
type就是类型 我定义成了表的名字。可能还有一些其他的参数信息,https://github.com/jprante/elasticsearch-jdbc
这里可以找到。
最后就是执行了,Elasticsearch/bin目录下执行mysql-simple-example.bat,mysql数据库的东西就导入了。
然后就是查询了,我用了Elasticsearch的插件head,来执行查询,发现查询的结果并没有分词,后来才明白我导入的时候并没有定义mapping,其实在导入数据的时候有参数去定义mapping,定义了就好了。
但是我并没有这么做,我后来是先在Elasticsearch里面定义了index和type然后给type定义的mapping
ik分词的安装这里就不说了,网上的步骤太多了
put http://127.0.0.1:9200/entp_cr1/bus_chinese_1/_mapping { "bus_chinese_1": { "_all": { "analyzer": "ik", "search_analyzer": "ik", "term_vector": "no", "store": "false" }, "properties": { "zon_nm": { "type": "string", "store": "no", "term_vector": "with_positions_offsets", "analyzer": "ik", "search_analyzer": "ik", "include_in_all": "true", "boost": 8 }, "shrt_nm": { "type": "string", "store": "no", "term_vector": "with_positions_offsets", "analyzer": "ik", "search_analyzer": "ik", "include_in_all": "true", "boost": 8 } } } }
定义了mapping之后我又重新导入了数据,然后执行的查询
post http://127.0.0.1:9200//entp_cr1/bus_chinese_1/_search { "query" : { "query_string" : { "default_field" : "zon_nm", "query" : "北京" } } }
部分执行结果
hits: { total: 40 max_score: 31.53391 hits: [ { _index: entp_cr1 _type: bus_chinese_1 _id: 110000 _score: 31.53391 _source: { zon_nm: 北京市 shrt_nm: 北京市 } } { _index: entp_cr1 _type: bus_chinese_1 _id: 110200 _score: 28.256222 _source: { zon_nm: 北京市县 shrt_nm: 县 } } { _index: entp_cr1 _type: bus_chinese_1 _id: 110102 _score: 24.21962 _source: { zon_nm: 北京市西城区 shrt_nm: 西城区 } } {
最后发现要学的东西还有很多啊 ,还是努力看文档吧,什么mysql动态更新,热更新ik词库,还有Elasticsearch的文档只看了个大概,我的天,还是慢慢来吧~~
未完待续~~