程序猿
微录

ElasticSearch之跨度查询 ---> 前提查询【containing、within】

程序猿微录 发布于: 2021-01-25 04:52 37 0 0 0
首页
文章
专栏
问答
寄语
公告
  • 前往登录

ElasticSearch之跨度查询 ---> 前提查询【containing、within】

程序猿微录 发布于 2021-01-25 04:52 37 0 0 0
所属文册: 搜索引擎 文章标签: ElasticSearch 、Span Containing

使用一个跨度查询作为查询背景,另一个查询作为真正的查询,从而圈定查询背景

Span Containing Query

组合多个跨度查询,并能指定那些查询结果(little)必须在什么情景(big)下出现

参数:

  • little:要查询的语句,支持其他跨度查询
  • big: 查询语句所处的大背景,little查询的结果必须是big的结果之一

说明:属于从大往小的查询,使用big子句区间的开始位置查询

示例

#  containing 包含
# -----------------------------------------------
#  Rose gives a lingering fragrance in the hand 
#   1    2    3     4         5     6    7   8
# -----------------------------------------------
#  big startPosition=4 endPosition=8  [4,8]
#  little startPosition=5 endPosition=6 [5,6]
#  从 position=4 开始检索
POST /index_span/_search
{
  "query": {
    "span_containing": {
      "big": {
        "span_near": {
          "clauses": [
            {
              "span_term": {
                "user.desc": "lingering"
              }
            },
            {
              "span_term": {
                "user.desc": "hand"
              }
            }
          ],
          "slop": 5,
          "in_order": true
        }
      },
      "little": {
        "span_near": {
          "clauses": [
            {
              "span_term": {
                "user.desc": "fragrance"
              }
            },
            {
              "span_term": {
                "user.desc": "in"
              }
            }
          ],
          "slop": 5,
          "in_order": true
        }
      }
    }
  }
}

Span Whithin Query

使用方式与Span Containing Query 一样

区别:属于从小往大查询,使用little子句区间的开始位置查询

#  whithin 包含
# -----------------------------------------------
#  Rose gives a lingering fragrance in the hand 
#   1    2    3     4         5     6    7   8
# -----------------------------------------------
#  big startPosition=4 endPosition=8  [4,8]
#  little startPosition=5 endPosition=6 [5,6]
#  从 position=5 开始检索
POST /index_span/_search
{
  "query": {
    "span_within": {
      "big": {
        "span_near": {
          "clauses": [
            {
              "span_term": {
                "user.desc": "lingering"
              }
            },
            {
              "span_term": {
                "user.desc": "hand"
              }
            }
          ],
          "slop": 5,
          "in_order": true
        }
      },
      "little": {
        "span_near": {
          "clauses": [
            {
              "span_term": {
                "user.desc": "fragrance"
              }
            },
            {
              "span_term": {
                "user.desc": "in"
              }
            }
          ],
          "slop": 5,
          "in_order": true
        }
      }
    }
  }
}