Elasticsearch 探索

      好久没有搞文章了,最近项目有需求要用分词,最开始想用solr来着,后来领导死活不用,说是用Elasticsearch ,Elasticsearch 有人维护,所以硬着头皮搞了搞。

      我是在windows上试验的,用的最新版本的Elasticsearch 2.3,安装和,插件什么的不就说了,

之后到导入mysql数据库的数据到Elasticsearch中,我首先down了一个JDBC importer for Elasticsearch,这东西并不是插件,只是个工具而已,下载了最新的版本2.3的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生成方式

扫描二维码关注公众号,回复: 493319 查看本文章

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的文档只看了个大概,我的天,还是慢慢来吧~~

未完待续~~

猜你喜欢

转载自libinchinabj.iteye.com/blog/2290349