ElasticSearch+python完成类似mysql的不分词查询
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 Elasticsearch- 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"}
}
}
}
}
相关文章