龙空技术网

57challenges-56个挑战-预备知识-关于模糊查询

飞霜luke 380

前言:

此刻你们对“模糊查询的定义”大约比较关注,看官们都想要剖析一些“模糊查询的定义”的相关文章。那么小编同时在网摘上搜集了一些有关“模糊查询的定义””的相关内容,希望大家能喜欢,咱们快快来学习一下吧!

因为57个挑战中,第56个题目,就是需要做一些模糊查询,早上特意学习下了网上相关的知识,这里做一下记录。

业界模糊查询用什么工具?用什么工具可能更合适?

上面这篇文章的搜索度还挺高的,简单的来说,如果用关系型数据库做搜索,一般要用 sql "select from * where '%*‘ like 的语句,这种语句最大的问题是限制很大.----如果MySQL模糊查询将%写在左侧,这样会导致索引失效.

但很多场景,需要搜索字符串中间的某几个,(比如电商搜索,只记得中间几个字)。如果还采用传统Mysql 这种搜索引擎,因为索引失效导致全表扫描,搜索效率大大降低了。

比如下面的两段代码,第二段代码会导致全表扫描。

select * from emp where age > 15 and user_name like "张%" limit 100;select * from emp where age > 15 and user_name like "%朔%" limit 100;

fulltext 索引也要89秒,业务是没法接受的。这个时候用Elastic search 搜索的效率就好很多,同样的场景,只需要400毫秒即可满足。

mysql 和 elastic search的使用场景对比

结论是,查询场景,且对延时要求高的,毫无疑问建议选择elastic search.

2.那么Elastic search 是个怎么样的神奇盒子呢?可以参考这篇文章:

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。

什么是lucene?

Lucene是一个开放源代码的全文检索引擎工具包。其实就是一个(多个)jar包,我们可以将其引入到自己的java项目中来实现全文检索,而ElasticSearch就是基于Lucene开发而来的搜索引擎。

拿ES 和 mysql 做对比,es 里面的document 相当于mysql的table, 而document 相当于row, field 相当于column;

而es 中间支持shard的概念,可以把一个表(index)拆到不同的分片(shard),不同分片放到不同的节点,并通过replicaset 来做冗余保护。

3.关于python 如何使用 ES :

参考这篇文章:

这里讲了几个概念,支持异步,支持复杂查询,支持ssl 模式交互等。

es 支持异步方式做交互,为了提高查询效率。

2.支持复杂查询DSL ,需要调用单独的接口:

简单接口模式如下图:7.0 版本

先写这么多,改天正式测试下。

标签: #模糊查询的定义