ES语句记录

360_ES查询语句

示例1:全文检索 所有字段包含”细胞”的患者信息
GET gzfy/patient_exam_result/_search
{
“query”: {
“multi_match” : {
“query” : “细胞”,
“fields” : [“_all”]
}
}
}


示例2:精确检索 所有字段中包含”细胞”或”肺癌”并且年龄是50岁患者的信息。
GET gzfy/patient_exam_result/_search
{
“from”:0,”size”:1,
“query”: {
“bool” : {
“must” : {
“term” : { “age” : 50 }
},
“should” : [
{ “multi_match” : { “query” : “细胞”,
“fields” : [“_all”] } },
{ “multi_match” : { “query” : “肺癌”,
“fields” : [“_all”] } }
],
“minimum_should_match” : 1
}
}
}


示例3:精确检索 获取年龄在50岁到80岁之间患者信息
GET gzfy/patient_exam_result/_search
{
“query” : {
“constant_score” : {
“filter” : {
“range” : {
“age” : {
“gte” : 50,
“lt” : 80
}
}
}
}
}
}

gzfy:index索引,相当于数据库
patient_exam_result:类型,相当于数据库中的表
from…size: 深度分页查询
bool:布隆过滤器
must:相当于数据库中的and
should:相当于数据库中的or
minimum_should_match:返回最小数据数
multi_match:用于匹配多字段
constant_score:忽略TF/IDF评分(相关性)
term:完全匹配
wildcard:通配符


示例4:select * from test where (test.a=”红细胞 and test.b between 10 and 50)or(test.a=”白细胞 and test.b between 40 and 50) “
GET gzfy/patient_exam_result/_search
{
“query”: {
“nested”: {
“path”: “examResults”,
“query” : {
“bool” : {
“should” : [
{ “bool” : {
“must” : [
{ “term” : {“examResults.examItemName”:”红细胞”}},
{
“range”: {
“examResults.examItemScore”: {
“gte”: 10,
“lte”: 50
}
}
}
]
}},

{ “bool” : {
“must” : [
{ “term” : {“examResults.examItemName”:”白细胞”}},
{
“range”: {
“examResults.examItemScore”: {
“gte”: 40,
“lte”: 50
}}}]}}]}}}}}
注意:examResults字段在maping中必须是nested类型


示例5:查看分词结果(索引+type+id+字段名)
GET gzfy_new/patient_exam_result/4010FAB5C99340FDAC1BF64EF3941651/_termvectors?fields=name
示例6:嵌套查询组合普通查询
GET gzfy/patient_exam_result/_search
{
“query”: {
“bool”:{
“must”: [
{“term”:{“age”:”45”}},
{“nested”: {
“path”: “examResults”,
“query”: {
“bool”: {
“must”: [
{
“term”: {
“examResults.examItemName”: “红细胞”
}
},
{
“range”: {
“examResults.examItemScore”: {
“gte”: 1
}}}]}}}}]}}}

##### 问题1

###### ##### #### ### ## # ES高亮后数据显示不全而且只有5个符合高亮数据返回

原因:highlighter方式高亮是个实时分析处理高亮器。即用户在查询的时候,es取到了符合条件的docid后,将需要高亮的字段数据提取到内存,再调用该字段的分析器进行分词,分词完毕后采用相似度算法计算得分最高的前n组并高亮段返回数据。

解决:每个字段都可以设置高亮显示的字符片fragment_size段大小(默认为100),以及返回的最大片段数number_of_fragments(默认为5),如果number_of_fragments值设置为0则不会产生片段。实际场景解决在highlighter中加入了”number_of_fragments”:0

##### 问题2

使用全匹配term检索name字段,输入全名,找不到数据
原因:name在mapping中是text类型的,text类型会做一个分词,比如naem=“张三”,数据存储是“张”,“三”所以会找不到“张三”

解决:把字段类型改为 keyword 即可,keyword不会去分词。

##### 问题3

需要把全局查询结果,所有符合字段高亮,由于不能使用_all在高亮中,需要把所有字段写入查询fields,由于字段类型不一致,所以就会出现查字符串报错
解决:前端判断传入的值是字符串类型还是数字类型,动态的添加字段到fields和highlighter中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值