美文网首页
es 正则搜索

es 正则搜索

作者: Lupino | 来源:发表于2021-10-18 22:21 被阅读0次

从文档上来看,用一个 regexp 查询语句就可以,但是我却无法成功,
依然查不到东西,既然查不到,那就得 Google, 还是未果。
后来注意到,这个些文档都用小写,那么我也用小写,出结果了。
那么问题就解决了,只要小写就可以了。
从客户端来的数据是使用,querystring,因此需要自己设计一个解析器,
用来解析 querystring,然后将要的字段变成正则表达式,放入查询语句,如下:

@app.get('/api/<type:(internal|external|selected)_product>/search/')
async def search_product_with_type(request, type):
    q = request.args.get('q', None)
    query = None
    if q:
        query = {}
        idx0 = q.find('product_number:')
        if idx0 > -1:
            idx1 = q.find(':', idx0) + 1
            s = q[idx1]
            if s == '"':
                idx2 = q.find('"', idx1 + 1)
            elif s == "'":
                idx2 = q.find("'", idx1 + 1)
            else:
                idx2 = q.find(' ', idx1 + 1)
                if idx2 == -1:
                    idx2 = len(q)

            value = q[idx1 + 1:idx2].strip().lower()
            if value[0] == '/':
                value = value[1:-1]
            else:
                value = f'.*{value}.*'

            query = {
                'regexp': {
                    'product_number': {
                        'value': value,
                        'flags': 'ALL',
                    },
                },
            }
            q = q[:idx0] + q[idx2 + 1:]
            q = q.strip().lower()
            if q:
                query = {
                    'bool': {
                        'must':
                        [query, {
                            'simple_query_string': {
                                'query': q,
                            }
                        }]
                    }
                }
        else:
            query = {
                'simple_query_string': {
                    'query': q,
                }
            }
    from_ = int(request.args.get('from', '0'))
    size = int(request.args.get('size', '100'))
    sort = request.args.get('sort', '_score')
    search = es.get_search_product_with_type(type)
    ret = await search(body={'query': query},
                       from_=from_,
                       size=size,
                       sort=sort)
    ret['hits'] = await fill_document(ret['hits'])
    return json(ret)

相关文章

  • es 正则搜索

    从文档上来看,用一个 regexp 查询语句就可以,但是我却无法成功,依然查不到东西,既然查不到,那就得 Goog...

  • es读优化

    es搜索数据 es搜索数据流程 es读写流程示意图 分布式搜索示意图image.png es的几种搜索类型 QUE...

  • vscode统计代码行数

    vscodectrl+shift+f搜索 并勾上正则 去掉空行 正则搜索并直接替换 去掉注释行 正则搜索并直接替换...

  • JavaScript ES6 - 正则表达式扩展

    正则扩展: 主要来与 ES5 做一个对比 (也就是语法的扩展) 1. ES6 正则新特性: 如图所示: 1. 正则...

  • 使用VSCode去除代码中注释

    将项目用vscode打开 按照下图点击,进行正则搜索正则搜索 匹配替换注释 正则匹配规则正则表达式说明/conte...

  • 正则扩展

    正则新特性 构造函数的变化,正则方法的扩展,u修饰符,y修饰符,s修饰符 es5正则的写法 es6新增 y修饰符 ...

  • es

    数据迁移 es,es是一个开源的搜索引擎,es包括数据存储和数据检索,搜索数据会比 mysql 快很多,搜索接口是...

  • JS正则表达式实用总结

    一、什么是正则表达式 正则表达式是由一个字符序列形成的搜索模式,搜索模式可用于文本搜索和文本替换。 二、创建正则表...

  • 结构化搜索

    总结 本章介绍es的结构化搜索,通过demo演示es的结构化搜索 结构化搜索 什么是结构化搜索结构化搜索就是对结构...

  • JS正则表达式

    JS正则表达式一条龙讲解,从原理和语法到JS正则、ES6正则扩展,最后再到正则实践思路 Stinson 关注 20...

网友评论

      本文标题:es 正则搜索

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