es全文搜索 es全文搜索实现

莫娜号 1

您好,今天欣欣来为大家解答以上的问题。es全文搜索相信很多小伙伴还不知道,现在让我们一起来看看吧!

es全文搜索 es全文搜索实现es全文搜索 es全文搜索实现


es全文搜索 es全文搜索实现


1、ElasticSearch 5.0以后,string类型有重大变更,移除了string类型,string字段被拆分成两种新的数据类型: text用于全文搜索的,而keyword用于搜索。

2、PostgreSQL自带有一个简易的全文检索引擎,可以实现小规模数据量的全文检索功能。

3、本文我们将介绍一下这个功能,对于小数据量的搜索这个功能是足够使用的,而无需搭建额外的ES等重量级的全文检索。

4、PG的全文检索作符是 @@ ,当一个 tsvector (文档)和 tsquery (条件)匹配时返回 true ,并且前后顺序无影响:@@ 由于编程导航的后端使用的是腾讯云开发技术,用 Node.js 来编写服务,所以选用的 @elastic/elasticsearch 库来作 ES。

5、作符支持隐式转换,对于 text 类型可以无需强类型转换( ::tsvector 或 to_tsvector(config_name, text) ),所以这个作符实际支持的参数类型是这样的:tsquery 查询条件并不是简单的正则,而是一组搜索术语,使用并且使用布尔作符 & (AND)、 | (OR)和 ! (NOT)来组合它们,还有短语搜索作符 (FOLLOWED BY)。

6、更详细的语法参见 此文档 。

7、此外,PostgreSQL还提供了两个相对简化的版本 plainto_tsquery 和 phraseto_tsquery 。

8、phraseto_tsquery ( phraseto_tsquery([ config regconfig, ] querytext text) returns tsquery )行为和 plainto_tsquery 行为类似,但是分词之后不是插入 & 而是 (FOLLOWED BY):使用索引可以加快全文检索的速度。

9、对于全文检索来说,可选的索引类型是 GIN (通用倒排索引)和 GIST (通用搜索树),文档更使用 GIN索引 。

10、创建一个 GIN 索引的范例:也可以是一个连接列:还可以单独创建一个 tsvector 列,为这个列创建索引:除了普通的 ORDER BY 条件之外,PostgreSQL为全文检索提供了两个可选的排序函数 ts_rank([ weights float4[], ] vector tsvector, query tsquery [, normalization integer ]) returns float4 和 ts_rank_cd([ weights float4[], ] vector tsvector, query tsquery [, normalization integer ]) returns float4 ,以便实现基于 权重 的排序。

11、此外,对于PostgreSQL 9.6以上的版本还可以使用 RUM index 排序。

12、(注意,这个是扩展,默认不包含)。

13、PostgreSQL默认的分词字典中并不包含中文分词字典,因此我们必须手工引入。

14、目前一个比较好的项目是 zhparser ,同时这个插件也是阿里云的RDS默认包含的。

15、安装和启用没什么好说的。

16、值得一提的是分词配置参数。

17、n,v,a,i,e,l 这几个字母分别表示一种token策略,只启用了这几种token mapping,其余则被屏蔽。

18、具体支持的参数和含义可以用 dFp+ zhparser 显示:WITH 表示词典使用的是内置的词典,即仅做小写转换。

19、根据需要可以灵活定义词典和token映射,以实现屏蔽词和同义词归并等功能。

20、比如我们看下面这个例子:可以看到 江淮 这个词组在查询的时候被忽略了,我们启用 j (abbreviation,简称)再看看结果:。

本文到这结束,希望上面文章对大家有所帮助。

最后修改时间:
基本反应类型有几种 基本反应类型有几种高中化学
上一篇
关于言的四字成语开头 言开头的四字词
下一篇

相关文章