美文网首页
ES区间查询

ES区间查询

作者: 响指_郭彦超 | 来源:发表于2020-04-10 17:18 被阅读0次

span_within

ES区间搜索query包含两部分:little和big;只有little term出现在big term之间的文档才会被返回

GET search_data/_search
{
  "size": 120, 
   "_source": "title", 
  "query": {
     "span_within": {
       "little": {
         "span_term": {
           "title": {
             "value": "大气"
           }
         }
       },
       "big": {
         "span_near": {
           "clauses": [
             {
               "span_term": {
                 "title": {
                   "value": "高端"
                 }
               }
             } ,
              {
               "span_term": {
                 "title": {
                   "value": "商务"
                 }
               }
             } ,
              {
               "span_term": {
                 "title": {
                   "value": "招聘"
                 }
               }
             } 
           ],
           "slop": 5,
           "in_order": true
         }
       }
     }
  }
}

结果:

{
        "_index" : "search_data",
        "_type" : "_doc",
        "_id" : "431983",
        "_score" : 13.440511,
        "_ignored" : [
          "xk_last_create_time"
        ],
        "_source" : {
          "title" : "高端商务大气企业招聘"
        }
      },
      {
        "_index" : "search_data",
        "_type" : "_doc",
        "_id" : "1121117",
        "_score" : 13.440511,
        "_ignored" : [
          "xk_last_create_time"
        ],
        "_source" : {
          "title" : "高端大气商务企业招聘"
        }
      }

可以看大"大气"必须出现在“高端”与“招聘”之间,

  • in_order
    其中“高端”、“商务”与“招聘”三个关键词在title field中是有序的,如果不关注顺序可将in_order设置为false
  • slop
    用来控制满足条件的最大term间距,上述query中little+big的term数为4,所以这里的slop不能低于4,否则无结果;如果slop>4那么会允许匹配的文档中在“高端”与“招聘”之间有其它word出现。

相关文章

网友评论

      本文标题:ES区间查询

      本文链接:https://www.haomeiwen.com/subject/ozormhtx.html