• 22.前缀搜索、通配符搜索、正则搜索


    主要知识点:

    • 前缀搜索
    • 通配符搜索
    • 正则搜索

       

    一、前缀搜索

    假如有如下doc数据:

    C3D0-KD345

    C3K5-DFG65

    C4I8-UI365

    现在搜索前缀为C3数据,会把前两个都搜索出来

       

    1、语法:

       

    GET my_index/my_type/_search

    {

    "query": {

    "prefix": {

    "title": {

    "value": "C3"

    }

    }

    }

    }

       

    2、前缀搜索的原理

       

    1prefix query不计算relevance score,所有结果的得分都是1,与prefix filter唯一的区别就是,filtercache bitset.

       

    2、会扫描整个倒排索引,因为他找到第一个前缀到c3的之后,还有可能后面的doc也还包含c3,所以直到扫描到整个到排索引之后才能确定。前缀越短,要处理的doc越多,性能越差,尽可能用长前缀搜索

       

    二、通配符搜索

       

    跟前缀搜索类似,功能更加强大,但是性能也很差。

       

    ?表示一个字条

    *表示0个或任意多个字符

    c? 表示以c开头,后面再有一个字符。

    1、语法:

    GET my_index/my_type/_search

    {

    "query": {

    "wildcard": {

    "title": {

    "value": "C?K*5"

    }

    }

    }

    }

       

    三、正则搜索

    用正则表达示进行搜索。

       

    GET /my_index/my_type/_search

    {

    "query": {

    "regexp": {

    "title": "C[0-9].+"

    }

    }

    }

       

    [0-9]:指定范围内的数字

    [a-z]:指定范围内的字母

    .:一个字符

    +:前面的正则表达式可以出现一次或多次

       

    这三种方式都会扫描整个倒排索引,性能会很差,在实际工作中,不到万不得已不要用这种语法。

  • 相关阅读:
    101. Symmetric Tree(js)
    100. Same Tree(js)
    99. Recover Binary Search Tree(js)
    98. Validate Binary Search Tree(js)
    97. Interleaving String(js)
    96. Unique Binary Search Trees(js)
    95. Unique Binary Search Trees II(js)
    94. Binary Tree Inorder Traversal(js)
    93. Restore IP Addresses(js)
    92. Reverse Linked List II(js)
  • 原文地址:https://www.cnblogs.com/liuqianli/p/8526857.html
Copyright © 2020-2023  润新知