ElasticSearch-搜索查询

 我来答
白露饮尘霜17
2022-07-21 · TA获得超过1.2万个赞
知道大有可为答主
回答量:6571
采纳率:100%
帮助的人:35.3万
展开全部

用 ? 表示单字母,* 表示任意个字母

用 ~ 表示搜索单词可能有一两个字母写的不对,按照相似度返回结果,最多可以模糊2个距离

[] 表示端点数值包含在范围内,{} 表示端点数值不包含在范围内;
例如: age:>30,date:["now-6h" TO "now"} 等。

(ES 中正则性能不高,尽量不要使用)
保留字符: . ? + * | { } [ ] ( ) " \ # @ & < > ~
转义字符用\,例如: \* \\

match查询执行步骤:

等同于: GET /school/_search?q=mark:good AND mark:day

等同于 GET /school/_search?q=mark:"good day"
查询的结果是必须挨着的短语,默认slop=0

执行步骤:

slop指定词项间隔离的范围,max_expansions最多查到前缀多少个词项停止,默认50,默认在所有分片上,找到匹配到前缀的前50个词。
5.0之后可以使用"profile": true,可以看到一个搜索聚合请求,是如何拆分成底层的 Lucene 请求

执行步骤:

1、term 查询被用于精确值匹配,这些精确值可以是数字(number)、日期(date)、布尔值(bool)、未经过分析的字符串(keyword);
2、term 查询对于输入的文本不分析,所以它将给定的值进行精确查询。

由于term查询不需要进行查询词的分析,mapping定义中,mark字段是text,是经过词分析的,索引在倒排索引中没有happy day这个词,所以以下查询查不出任何结果

terms 查询和 term 查询一样,但它允许你指定多值进行匹配。
如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件和 term 查询一样,terms 查询对于输入的文本不分析。

range范围查询可以用于数字、日期等类型的字段。
gt:大于,gte:大于等于,lt:小于,lte:小于等于。

gt 大于一个日期。向上取,2014-11-18||/M -> 2014-11-30T23:59:59.999
gte 大于等于一个日期。向下取,2014-11-18||/M -> 2014-11-01
lt 小于一个日期。向下取,2014-11-18||/M -> 2014-11-01
lte 小于等于一个日期。向上取2014-11-18||/M -> 2014-11-30T23:59:59.999

组合查询,不使用评分计算,提高效率,返回统一评分,评分为1。

must:所有的语句都 必须(must) 匹配,与 AND 等价。
must_not:所有的语句都 不能(must not) 匹配,与 NOT 等价。
should:至少有一个语句要匹配,与 OR 等价。

####################################

原则上来说,使用查询语句来做全文本搜索或其他需要进行相关性评分,剩下的全部用过滤语句。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
莱伯泰科
2024-10-28 广告
LabTech Group,即北京莱伯泰科仪器股份有限公司,是业界领先的实验室科学仪器与解决方案提供商。我们专注于分析测试仪器的研发、生产和销售,致力于为全球科研工作者、高校及企业实验室提供高性能、高稳定性的产品与服务。通过持续的技术创新与... 点击进入详情页
本回答由莱伯泰科提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式