ElasticSearch+python完成类似mysql的不分词查询

2020-05-29 00:00:00 索引 匹配 检索 可视化 分词

ElasticSearch 6.x + python 3.x

近做一个项目,要存储千万级别的三元组(比如:【姓名,年龄,职业】三个字段所对应的信息),后续有频繁的查询,尝试过存入mysql,但是连续上百次查询都超级慢,学长建议尝试一下ES建立倒排索引,于是这两天开始学习ES,虽然它主要用于日志或者文档的管理,但是还是想尝试一下能不能把ElasticSearch当做Mysql,实现mysql等同的一些功能,存储千万条数据,同时满足快速返回结果的需求

因为ES在建立索引和查询的时候会自动分词,比如我搜索“南京长江大桥”会把检索词分词“南京”“长江”,“大桥”,检索的时候也会把存储的内容分词匹配,无法完成匹配。所以解决方法就是建立不分词的索引和不分词的检索。


如果把ElasticSearch当做关系数据库来看,他们的对应的关系如下:

Relational DB: ->Databases->Tables->Rows->Columns

ElasticSearch: ->Indices->*->Documents->Fields


预先准备:

Getting Started with Elasticsearchwww.elastic.co
  1. ElasticSearch是啥,为什么用它

2.下载,安装并启动ElasticSearch ,Kibana(可视化界面)



step 1:(ElasticSearch)建立索引 == Relational DB(设计表格)

进入Kibana可视化界面:Dev Tools-左侧执行以下代码

不分词建立索引:

PUT /index_test          // index_test 对应mysql database_name
{
  "mappings":{
    "doc_type":{        // doc_type对应 对应mysql table_name
      "properties": {
          "field1": {"type": "keyword"},
          "field2": {"type": "keyword"},
          "field3": {"type": "keyword"}
      }
    }
  }
}

例如:

    PUT /fb2m
    {
      "mappings":{
        "kb_fact":{
          "properties": {
              "subject": {"type": "keyword"},
              "predicate": {"type": "keyword"},
              "object": {"type": "keyword"}
          }
        }
      }
    }

相关文章