美文网首页
详解 es span query

详解 es span query

作者: 郭彦超 | 来源:发表于2020-08-11 18:07 被阅读0次

span query 指的是es的区间查询,通过该语句用户可以精准控制多个输入词的先后顺序,以及多个关键词在文档中的前后距离

span term

与普通的term检索类似,用来获取某个字段包含特定term的文档。

{
    "query": {
        "span_term" : { "user" : "kimchy" }
    }
}

支持boost提权

{
    "query": {
       "span_term" : { "user" : { "value" : "kimchy", "boost" : 2.0 } }
    }
}

span multi term

允许用户封装一个 multi term query 进行span query的嵌套查询,目前支持 wildcard, fuzzy, prefix, range or regexp query

{
    "query": {
        "span_multi":{
            "match":{
                "prefix" : { "user" :  { "value" : "ki", "boost" : 1.08 } }
            }
        }
    }
}

span first

从文档开始位置至end结束位置进行关键词查找,当end设置为1时,那么关键词必须匹配在文档开头。

{
    "query": {
        "span_first" : {
            "match" : {
                "span_term" : { "user" : "kimchy" }
            },
            "end" : 3
        }
    }
}

其中match查询子句可以是任意的span query

span near

span near可以用来对多个关键词进行顺序查找:

{
    "query": {
        "span_near" : {
            "clauses" : [
                { "span_term" : { "field" : "value1" } },
                { "span_term" : { "field" : "value2" } },
                { "span_term" : { "field" : "value3" } }
            ],
            "slop" : 4,
            "in_order" : true
        }
    }
}

其中in_order需要设置为true,value2必须出现在value1和value3直接,且后一个关键词的start_offset减去前一个end_offset的值必须小于等于slop

span or

可以指定多个查询子句,每种查询返回的数据进行合并处理

{
    "query": {
        "span_or" : {
            "clauses" : [
                { "span_term" : { "field" : "value1" } },
                { "span_term" : { "field" : "value2" } },
                { "span_term" : { "field" : "value3" } }
            ]
        }
    }
}

查询子句可以更换为任意的span query

span not

该查询有点类似于bool query中的must与must not

{
    "query": {
        "span_not" : {
            "include" : {
                "span_term" : { "field1" : "蔬菜" }
            },
            "exclude" : {
                "span_near" : {
                    "clauses" : [
                        { "span_term" : { "field1" : "苹果" } },
                        { "span_term" : { "field1" : "手机" } }
                    ],
                    "slop" : 0,
                    "in_order" : true
                }
            }
        }
    }
}

span containing

span containing与span within用法相同,只是底层调用的Lucene方法不同而已,效果是一样的

{
    "query": {
        "span_containing" : {
            "little" : {
                "span_term" : { "field1" : "foo" }
            },
            "big" : {
                "span_near" : {
                    "clauses" : [
                        { "span_term" : { "field1" : "bar" } },
                        { "span_term" : { "field1" : "baz" } }
                    ],
                    "slop" : 5,
                    "in_order" : true
                }
            }
        }
    }
}

通过查询效果 可以发现与span near大致相同,但不同的是little部分不受big中slop限制

相关文章

  • 详解 es span query

    span query 指的是es的区间查询,通过该语句用户可以精准控制多个输入词的先后顺序,以及多个关键词在文档中...

  • ES span query

    Span query = term query + position

  • ES区间查询

    span_within ES区间搜索query包含两部分:little和big;只有little term出现在b...

  • 深入理解 Skywalking Agent

    概述 Agent 功能介绍 + 整体结构 + 设计 插件机制详解 Trace Segment Span 详解 异步...

  • ES查询语法

    ES查询语法 Query_string 1. Query_string 1.1 Query_string (不常用...

  • es query

    es推荐读物:官网,https://zq99299.github.io/note-book/elasticsear...

  • Elasticsearch删除数据之_delete_by_que

    es参考版本:elasticsearch:5.5_delete_by_query会删除所有query语句匹配上的文...

  • Android Span详解

    引子 Android中的Span之前用的很少,接触多了以后,发现Span还是相当有趣的。 Span的命名即使不是最...

  • Android Span详解

    引子 Android中的Span之前用的很少,接触多了以后,发现Span还是相当有趣的。Span的命名即使不是最差...

  • EXPLAIN 命令详解

    # MySQL Explain详解 __简介__ 执行计划(`query Execution plan`) __语...

网友评论

      本文标题:详解 es span query

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