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中。

ES (Elasticsearch) 是由 Elasticsearch 公司提供的开源全文搜索及分析引擎,它基于 Lucene,用于构建高性能、分布式的大数据处理系统。ES 支持实时查询,并能高效地处理大量的日志、事件流和其他实时数据源。下面是一些常用的 ES 查询语句及其解释: ### 1. **基本搜索查询** 基础的全文搜索语句,查找包含指定关键字的所有文档。 ```json GET /index_name/_search { "query": { "match": { "field_name": "keyword" } } } ``` 这里 `index_name` 是索引名称,`field_name` 是需要搜索的字段名,`keyword` 是你要搜索的关键字。 ### 2. **范围查询** 用于查询特定范围内值的记录。 ```json GET /index_name/_search { "query": { "range": { "numeric_field": { "gt": 5, "lt": 10 } } } } ``` 在这个例子中,我们查询 `numeric_field` 字段大于5且小于10的记录。 ### 3. **聚合查询** 聚合查询用于对结果集进行统计汇总。 ```json GET /index_name/_search { "aggs": { "my_aggregation": { "terms": { "field": "category", "size": 10 }, "aggs": { "average_price": { "avg": { "field": "price" } } } } } } ``` 这个查询会将所有文档按照 `category` 字段分组,并计算每个类别下平均价格。 ### 4. **过滤查询** 用于进一步缩小搜索结果的条件筛选。 ```json GET /index_name/_search { "query": { "bool": { "must": [ {"term": { "status": "active" }}, {"range": {"timestamp": { "gte": "2021-01-01T00:00:00Z", "lte": "2021-12-31T23:59:59Z" }}} ] } } } ``` 此查询将只返回状态为“active”且时间戳在2021年之间的文档。 ### 5. **高亮显示查询** 用于突出显示查询匹配到的结果。 ```json GET /index_name/_search { "highlight": { "pre_tags": ["<strong>"], "post_tags": ["</strong>"], "fields": { "title": {} } }, "query": { "match": { "title": "keyword" } } } ``` 这将在搜索结果的 `title` 字段中高亮显示匹配的关键字。 ### 相关问题: 1. **如何优化 ES 性能?** 2. **ES 的索引是如何工作的?** 3. **在实际项目中如何安全地利用 ES 进行大规模数据检索?**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值