ES 查询

最近的项目用ES做查询服务,感觉蛮有意思的,查询速度也蛮快。

1. ES处理并发的机制

https://blog.csdn.net/ctwctw/article/details/106457237?utm_medium=distribute.pc_feed.312601.nonecase&depth_1-utm_source=distribute.pc_feed.312601.nonecase

https://blog.csdn.net/qq_37910578/article/details/81709411?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

2. ES查询语法

ES可以查询多个字段,例如:查询字段1或字段2中包含xxx的记录,对查询文本的大小写不敏感,&default_operator也可以设置为AND(和)

http://HOST:PORT/INDEX/_search?q=FIELD1:"XXX" FIELD2:"XXX"&default_operator=OR&size=100&pretty

ES可以查询单个字段包含多个查询文本的记录,例如:查询字段1中同时包含AAA,BBB的记录

http://HOST:PORT/INDEX/_search?q=FIELD1:(AAA,BBB)&default_operator=AND&size=100&pretty

ES无法进行既AND又OR的查询,例如:希望返回字段1中同时包含AAA,BBB的记录,或字段2中同时包含AAA,BBB的记录,下面的语法会返回错误的结果

 http://HOST:PORT/INDEX/_search?q=FIELD1:(AAA,BBB) FIELD2:(AAA,BBB)&default_operator=OR&size=100&pretty

3. es.search查询

不使用ES的URL进行查询,采用es.search的语法进行查询,重点在于body中的设置,下面语法展示了乱序取指定count的写法。更多的语法见:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
should(OR查询)、must(AND查询)

# select * from TABLE where field1=text order by ???
es = Elasticsearch([HOST + ':' + PORT])
body = {
    "size": count,
    "query": {
        "multi_match": {
            "query": text,
            "fields": [field1]
        }
    },
    "sort": {
        "_script": {
            "script": "Math.random()",
            "type": "number",
            "order": "asc"
        }
    }
}
result = es.search(index=TABLE, body=body)
# select * from TABLE where label=text1 and (field1=text2 or field2=text2)
es = Elasticsearch([HOST + ':' + PORT])
body = {
    "size": count,
    "query": {
        "bool": {
            "must": [
                {
                    # 先满足 label 中包含 "bbb"
                    "bool": {
                        "must": {
                            "match": {
                                "label": {
                                    "query": text1,
                                }
                            }
                        }
                    }
                },
                {
                    # 再满足 field1 或 field2 中包含 "aaa"
                    "bool": {
                        "should": [
                            {
                                "match": {
                                    field1: {
                                        "query": text2,
                                    }
                                }
                            },
                            {
                                "match": {
                                    field2: {
                                        "query": text2,
                                    }
                                }
                            },
                        ]
                    }
                }
            ]
        }
    }
}

4. ES+bert相似查询

es可以和bert组合起来实现相似内容的查询,例如,查询字段1中包含“春节”的内容,可以查到包含“中秋节”、“清明节”等相似内容的记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值