elasticsearch常用操作,记录一下,免得忘记了还得到处查。
1、head无法连接到elasticsearch的解决方式:
在elasticsearch-7.7.1\config下的elasticsearch.yml中补充下述内容,重启elasticsearch即可
http.cors.enabled: true
http.cors.allow-origin: "*"
2、elasticsearch验证自定义分词器插件是否可用
http://localhost:9200/_analyze
{
"analyzer":"gridsum",
"text":"我你一定难度"
}
效果就看你自己定义的分词器是啥样的效果了
3、通过mapping给指定的field设置使用的分词器(这块我也没有摸索太清楚,各位谨慎使用)
http://localhost:9200/dag/_mappings
analyzer属性进行修改就可以
{
"properties":{
"test": {
"type": "text",
"store":true,
"analyzer": "gridsum"
},
"area": {
"type": "text",
"analyzer": "gridsum"
}
}
}
4、设定elasticsearch某个索引的默认分词器,school_index为索引名,ik_max_word为索引名(此操作有风险,谨慎使用)
PUT /school_index
{
"settings" : {
"index" : {
"analysis.analyzer.default.type": "ik_max_word"
}
}
}
5、elasticsearch如何查看具体field的分词结果
/indexone/_doc/1 对应的是/索引/文档/id
fields=字段名
GET /indexone/_doc/1/_termvectors?fields=test
6、关于elasticsearch图形化界面,个人觉得可能kibana更好用,功能更丰富一些。head也可以使用,不过就是界面简单,功能少一些,但是可以满足一些简单的应用
es自带的分词器是会将汉字逐个切割开,例如:我是程序员,会被切割成:我 是 程 序 员
注:插图和文字内容不匹配,可以忽略,这是我自己学习时记录的内容,可以不看。
所以当es使用自带的分词器的trim查询时,输入我是,无法查询到,输入我则可以
为es指定具体使用空格分词器,将字段内容修改为我是 程序员,同上述查询方式一样时,输入我是,则可以查询到结果
分词器是否可用,可以通过_analyze来验证,但是如果要在es中使用指定分词器,则需要通过mapping指定,或者修改默认分词器即可,修改默认分词器的配置等我找到了会补上。
7、今天工作发现了一个万金油的写法,当我们查询es时遇到阻碍,不知道该怎么写查询的语句的时候,作为一个java开发,你可以在查询语句中嵌入一段java的代码,也许对你有一定的帮助
{
"aggs":{
"all_interests":{
"terms" :{
"script":"String he=new SimpleDateFormat('HH').format(new Date(doc['timeHour'].value)); if(he.equals('01')){return he;}else{return null;}",
"order" : { "_term" : "desc" }
}
}
}
}