1.数据源于
2.加载数据:
curl -s -XPOST http://172.22.112.1:9200/_bulk --data-binary @elasticsearch.txt
-S:显示错误,-s静默模式
【上传数据时,中途kill,不会部分上传成功,皆失败】
3.设置分词器
在没有设置分词器之前,ES会将汉字单个切分(当安装完Elasticsearch之后,默认已经含有一个分词法,叫做“standard”,对中文的支持较差),比如搜索:
http://172.22.112.1:9200/listing_new/listing/_search?q=category_name:海水,
GET /listing_new/listing/_search?q=category_name:%E6%B5%B7%E6%B0%B4
会出来“海鲜水产”,而我们可能希望“海水”二字并不分开。
安装分词器:
.\elasticsearch-plugin.bat install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.8/ela sticsearch-analysis-ik-5.6.8.zip
重启ES;
删除之前自动生成的索引:
DELETE /listing_new
在创建index之前新建mapping
- 默认_all是开启的(也就是说,不指定字段时会检索所有没有禁用_all参数的字段),通过”_all”: { “enabled”: false }来禁用
- 对于一个索引来说,number_of_shards只能设置一次(默认为5),而number_of_replicas可以使用索引更新设置API在任何时候被增加或者减少。number_of_replicas默认为1。
- 如果你想禁止自动创建索引,你可以在 config/elasticsearch.yml 的每个节点下添加下面的配置:
action.auto_create_index: false
- 在lucen中:
- analyzer——分析器,这里的ik分词器有ik-smart模式和ik-max_word两种模式,前者为粗粒度的划分,后者为细粒度。粗粒度也意味着准确率高,但是因为粗粒度划分,所以其检索出来的结果就少,所以召回率低。【如果字段指定了分析器(对应Lucen中的Index.ANALYZED),就会被“分割”,并存入倒排索引;如果不指定,Lucen中的Index.NOT_ANALYZED,不做任何分词操作,直接存入倒排索引,因此适用于手机号、URL等类型的数据(也可以通过指定字段为keyword来实现)】
- 索引器:新建索引以及打开索引、向索引中添加、删除、修改文档
- 查询解析器
自定义分词器
## 手动设置mapping,ik
PUT /listing_new
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 0,
"analysis": {
"analyzer": {
"ik": {
"tokenizer": "ik_smart"
}
}
}
},
"mappings": {
"listing": {
"dynamic": true,
"properties": {
"listing_title": {
"type": "text",
"analyzer": "ik"
},
"category_name": {
"type": "text",
"analyzer": "ik"
},
"listing_id": {
"type": "long"
},
"category_id": {
"type": "long"
}
}
}
}
}
报错:"Custom Analyzer [ik] failed to find tokenizer under name [ik_smart]"
安装分词器后需要重启集群,不需要设置index.analysis.analyzer.ik.type : “ik”
再次执行查询:http://172.22.112.1:9200/listing_new/listing/_search?q=category_name:海水
可以看到无命中
- 在自然语言处理中,通常还需要设置”停用词“以及”同义词“