免费网站建设自带后台管理程序,安徽省招投标中心官网,自己注册个公司做网站怎么样,网站开发技术方案与设施一、精准查询termterm是代表完全匹配#xff0c;即不进行分词器分析#xff0c;文档中必须包含整个搜索的词汇
1、term单值 字段只有一个值时候#xff0c;用term关键词查询
查询biz_id值为1909190023901225的记录
curl -XGET http://192.168.1.73:9200/xyerp/order/_sea…一、精准查询termterm是代表完全匹配即不进行分词器分析文档中必须包含整个搜索的词汇
1、term单值 字段只有一个值时候用term关键词查询
查询biz_id值为1909190023901225的记录
curl -XGET http://192.168.1.73:9200/xyerp/order/_search -H Content-Type: application/json -d { query: { term: { biz_id: 1909190023901225 } } } 进一步优化查询因为是精准查询不需要查询进行评分计算只希望对文档进行包括或排除的计算所以我们会使用 constant_score 查询以非评分模式来执行 term 查询并以一作为统一评分。推荐如下查询
{ query : { constant_score : { filter : { term : { biz_id : 1909190023901225 } } } } }2、terms多值 字段有一多个值时候用terms关键词查询后跟数组
{ query:{ terms:{ biz_id:[1909190023901225] } } } constant_score 以非评分模式查询推荐如下查询
{ query : { constant_score : { filter : { terms : { biz_id : [1909190023901225,e1909190111365113] } } } } } 3、term多个字段 { query: [{ term: { biz_id: 1909190023901225 } }, { term: { name: zhangsan } }] } 二、匹配查询matchmatch和term的区别是 ,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过程match查询相当于模糊匹配,只包含其中一部分关键词就行
match 是模糊查询而term 是 精确匹配查询
1、match 进行full text search或者exact value(非string字段或not_analyzed的字段)进行匹配
查询字段merchant_id为2501的值并按时间倒序
{ query: { match: { merchant_id: 2501 } }, sort: [ { trade_finished_time: { order: desc } } ] } 2、match_all { match_all: {}} 匹配所有的 当不给查询条件时默认全查。
{ query: { match_all: {} } } 3、multi_match 同时对查询的关键词多个字段同时进行匹配即多个字段是AND的关系
{ query:{ multi_match:{ query:2501, fields:[merchant_id,_id] } } } 同时field还支持更为丰富的查询
在在fields中按brandName品牌名、sortName分类名、productName商品名productKeyword商品关键字搜索“牛仔 弹力”关键词brandName源值、拼音值、关键字值都是100分sortName源值、拼音值80分productName源值60分productKeyword值20分分值由高到低优先级搜索
{ query: { multi_match: { query: 牛仔 弹力, fields: [ brandName^100, brandName.brandName_pinyin^100, brandName.brandName_keyword^100, sortName^80, sortName.sortName_pinyin^80, productName^60, productKeyword^20 ], type: multi-match-type, operator: AND } } } 4、match_phrase match_phrase查询分析文本并从分析文本中创建短语查询。 类似 match 查询 match_phrase 查询首先将查询字符串解析成一个词项列表然后对这些词项进行搜索但只保留那些包含 全部 搜索词项且 位置与搜索词项相同的文档
如下查询 quick brown、quick brown fox、 brown fox可以查询到quick fox 查询不到
{ query: { match_phrase: { title: quick brown fox } } } 如下 查询 a,b啊和b之间隔3个字符可以查询到隔不是3个查询不到
{ query:{ match_phrase :{ query:a,b, slop:3 } } }三、bool查询 bool查询包含四种操作符分别是must,should,must_not,query。它们均是一种数组数组里面是对应的判断条件
must 必须匹配与and等价。贡献算分
must_not必须不匹配与not等价常过滤子句用但不贡献算分
should 选择性匹配至少满足一条与 OR 等价。贡献算分
filter 过滤子句必须匹配但不贡献算分
{ query : { filtered : { filter : { bool : { should : [ { term : {merchant_id : 100}}, { term : {pay_type : 3}} ], must_not : { term : {trade_type : 2} } } } } } } 四、filter查询 过滤器会查询对结果进行缓存不会计算相关度避免计算分值执行速度非常快。
如下 查询出status为active的状态
{ query: { bool: { filter: { term: { status: active } } } } } filter也常和range范围查询一起结合使用range范围可供组合的选项
gt : 大于
lt : 小于
gte : 大于等于
lte :小于等于
如下查询merchant_id值为2501下的交易数据
{ query: { bool: { must: { term: { merchant_id: 2501 } }, filter: { range: { trade_finished_time: { from: 2019-09-01T00:00:00, to: 2019-09-30T23:59:59 } } } } } }如下查询must下匹配filter进行过滤range定义范围
{ query: { bool: { must: [ { match: { title: Search } }, { match: { content: Elasticsearch } } ], filter: [ { term: { status: 1 } }, { range: { publish_date: { gte: 2015-01-01 } } } ] } } } 五、常见查询场景 1、查询商户ID为3582订单号为360102199003072618按时间范围过滤按下单时间倒序每次查询100条
{ query: { bool: { must: [{ term: { merchant_id: 3582 } }, { term: { order_num: 360102199003072618 } }], filter: [{ range: { order_time: { from: 2019-11-01T17:00:0008:00, to: 2019-11-01T20:00:0008:00 } } }] } }, size: 100, sort: [{ order_time: desc }] } ———————————————— 版权声明本文为CSDN博主「LiryZlian」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。 原文链接https://blog.csdn.net/lzxlfly/article/details/102771175