首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【全文搜索】全文搜索 PostgreSQL 或 ElasticSearch

在本文中,我记录了在 PostgreSQL(使用 Django ORM)和 ElasticSearch 中实现全文搜索 (FTS) 时的一些发现。...作为一名 Django 开发人员,我开始寻找可用的选项来在大约一百万行的标准大小上执行全文搜索。有两个值得尝试的选项:PostgreSQL 和 ElasticSearch。...在深入研究我的发现之前,让我们澄清一下全文搜索 (FTS)(或“搜索”)与数据库过滤器或查询之间的区别。“搜索”涉及从零开始,然后向其中添加结果。数据库过滤从一个集合开始,然后根据条件从中删除条目。...过滤不适用于模糊输入,但可以使用模糊输入完成“搜索”。 PostgreSQL 全文搜索 我的大部分项目都使用 Django Web 框架和 PostgreSQL。...因此,如果项目不打算拥有数千万条记录或大规模数据,Postgresql 全文搜索将是最佳选择。 术语 词干提取:这是将单词简化为其根形式的过程,以确保该单词的变体在搜索过程中与结果匹配。

2.3K30

简单全文搜索

搜索是一个复杂的功能,但对于一些简单的搜索任务,我们可以使用 Django Model 层提供的一些内置方法来完成。现在我们来为我们的博客提供一个简单的搜索功能。...当用户输入某个关键词进行搜索后,我们希望为用户显示标题和正文中含有被搜索关键词的全部文章。...整个搜索的过程如下: 用户在搜素框中输入搜索关键词,假设为 “django”,然后用户点击了搜索按钮提交其输入的结果到服务器。...当然这样的搜索功能是非常简略的,难以满足一些复杂的搜索需求。编写一个搜索引擎是一个大工程,好在 django-haystack 这款第三方 app 为我们完成了全部工作。...使用它我们可以实现更加复杂的搜索功能,比如全文检索、按搜索相关度排序、关键字高亮等等类似于百度搜索的功能,功能十分强大。

1.9K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Solr实现全文搜索

    Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。...Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。 Solr是一个全文检索服务器,只需要进行配置就可以实现全文检索服务。...2、Solr中的字段必须是先定义后使用。 1.2.2.1 中文分析器的配置 第一步:使用IK-Analyzer。把分析器的文件夹上传到服务器。 第二步:需要把分析器的jar包添加到solr工程中。...跳转到文档末尾:G   1.2.2.2 业务字段配置 业务字段判断标准: 1、在搜索时是否需要在此字段上进行搜索...例如:商品名称、商品的卖点、商品的描述 2、后续的业务是否需要用到此字段。例如:商品id。

    91410

    02.全文搜索ES

    全文搜索 1.介绍 elasticsearch 6 (和elasticsearch 5 的区别在于,root用户权限、一个库只能建立一个表) elasticsearch 6一个索引只能建立一张表 1.1...文本搜索引擎: 优点:搜索快; 缺点:占用空间。...solr需要依赖zk1. 1.2 elasticSearch(搜索引擎)的算法 倒排索引(在内容上建立索引,用内容匹配索引); btree mysql数据库的索引方式。...type 类似于rdbms的table,但是与其说像table,其实更像面向对象中的class , 同一Json的格式的数据集合。...,与es的文档(分词处理并建立了索引)之间的相关度的高低 4.ES集群 4.1 节点、分片、索引 ==节点:==一个节点就是一个es的服务器,es集群中,主节点负责集群的管理和任务的分发,一般不负责文档的增删改查

    69620

    Elasticsearch全文搜索与TFIDF

    为了消除文档本身大小的影响,通常,它的定义是: TF = 某个词在文档中出现的次数 / 文档的总词数 也有其他表示方法,在Elasticsearch (lucene)中的使用的方法是 tf(t...通常,它的计算方法是: IDF=log(语料库中的文档数/(包含该词的文档数+1)) 如果所有文章都包涵某个词,那个词的IDF=log(1)=0, 即重要性为零。停用词的IDF约等于0。...norm(d) = 1 / √numTerms 即: 1 / 词出现次数的平方根 二、elasticsearch的全文搜索 elasticsearh的全文搜索涉及到两个重要的方面:相关性(Relevance...TF/IDF 相关性方法分析 做一次搜索,带explain,elasticsearch会返回如何匹配。...比如在title字段中进行全文搜索,关键词为'python' GET course/_search?

    2K10

    ElasticSearch构建全文搜索系统

    前言 Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎,通过它我们可以构建出一个强大的全文搜索系统,解决诸如文章检索慢,商品检索慢、MySQL的like查询慢这样的问题。...——苏格拉底 8 chenqionghe喜欢运动,绳命是如此的精彩,绳命是如此的辉煌 我们想像这是千万级别的表,最后需要实现传入关键字,返回相应的文章 例如:搜索运动返回页码1,2,3,5,7,8对应的文章...localhost:9200/book/_close' # 开启 curl -XPOST 'localhost:9200/book/_open' 总结 通过Elasticsearch,我们可以快速构建出一个强大的全文搜索系统...倒排索引为搜索而生,先对需要索引的字段进行分词,再通过词直接匹配出文档,速度非常快,这是优点。...但是,相比数据库采用的 B 树索引,它的写入和更新性能都比较差,因此倒排索引也只是适合全文搜索,不适合更新频繁的交易类数据。

    1.3K30

    Django 博客实现简单的全文搜索

    作者:HelloGitHub-追梦人物[1] 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库[2] 点击本文最下方的“阅读原文”即可获取 搜索是一个复杂的功能,但对于一些简单的搜索任务...现在我们来为我们的博客提供一个简单的搜索功能。 概述 博客文章通常包含标题和正文两个部分。当用户输入某个关键词进行搜索后,我们希望为用户显示标题和正文中含有被搜索关键词的全部文章。...整个搜索的过程如下: 用户在搜素框中输入搜索关键词,假设为 “django”,然后用户点击了搜索按钮提交其输入的结果到服务器。...当然这样的搜索功能是非常简略的,难以满足一些复杂的搜索需求。编写一个搜索引擎是一个大工程,好在 django-haystack 这款第三方 app 为我们完成了全部工作。...使用它我们可以实现更加复杂的搜索功能,比如全文检索、按搜索相关度排序、关键字高亮等等类似于百度搜索的功能,功能十分强大。

    71020

    带你认识 flask 全文搜索

    01 全文搜索引擎简介 对于全文搜索的支持不像关系数据库那样是标准化的。...有几种开源的全文搜索引擎:Elasticsearch,Apache Solr,Whoosh,Xapian,Sphinx等等,如果这还不够,常用的数据库也可以像我上面列举的那些专用搜索引擎一样提供搜索服务...05 全文搜索抽象化 正如我在本章的介绍中所说的,我希望能够轻松地从Elasticsearch切换到其他搜索引擎,并且我也不希望将此功能专门用于搜索用户动态,我更愿意设计一个可复用的解决方案,如果需要,...对于搜索支持,我将定义我自己的SearchableMixin类,当它被添加到模型时,可以自动管理与SQLAlchemy模型关联的全文索引。...这两行代码设置了每次提交之前和之后调用的事件处理程序。现在Post模型会自动为用户动态维护一个全文搜索索引。

    3.5K20

    python全文搜索库Whoosh

    /stable/ pypi:https://pypi.python.org/pypi/Whoosh/#downloads 安装 pip install Whoosh Whoosh是一个纯python的全文搜索库...大意:Whoosh是索引文本及搜索文本的类和函数库。它能让你开发出一个个性化的经典搜索引擎。...例如,如果你在写博客选择(或者说博客搜索)程序,你可以用Whoosh添加一个让用户搜索博客条目的函数 因为做的是中文的全文检索需要导入jieba工具包以及whoosh工具包 Schema 有两个field...QueryParser的构造函数的第一个参数是默认要搜索的field。...这个field type不可搜索。这对于你想在搜索结果中展示给用户的文档信息很有用。 whoosh.fields.KEYWORD 这个类型针对于空格或逗号间隔的关键词设计。可索引可搜索(部分存储)。

    1.3K00

    Mysql全文搜索match against的用法

    1.使用Mysql全文检索fulltext的先决条件 表的类型必须是MyISAM 建立全文检索的字段类型必须是char,varchar,text 2.建立全文检索先期配置 由于Mysql的默认配置是索引的词的长度是...,对于大数量的表来说,先加载数据再来定义全文索引的 速度要远远优于在一个已经定义好全文索引的表里面插入大量数据的速度。...against()中定义的是所要搜索的字符串以及要求数据 库通过哪种模式去执行全文索引的搜索查询。下面通过一个例子分别介绍一下fulltext所支持的3中搜索模式。...MySQL全文索引与中文分词总结及一般的关键词搜索流程 http://www.tzlink.com/info/show.php?...5.1+ 全文检索分词插件 http://hi.baidu.com/start_and_end/blog/item/6d6ab918b7d3800334fa412e.html 家用一下搜索引擎就会发现

    2.9K60

    Nebula 基于 ElasticSearch 的全文搜索引擎的文本搜索

    [Nebula 基于全文搜索引擎的文本搜索] 1 背景 Nebula 2.0 中已经支持了基于外部全文搜索引擎的文本查询功能。...经过一番调研和讨论,所谓术业有专攻,文本搜索的工作还是交给外部的第三方全文搜索引擎来做,在保证查询性能的基础上,同时也降低了 Nebula 内核的开发成本。...2 目标 2.1 功能 2.0 版本我们只对 LOOKUP 支持了文本搜索功能。也就是说基于 Nebula 的内部索引,借助第三方全文搜索引擎来完成 LOOKUP 的文本搜索功能。...数据同步性能:既然我们使用了第三方的全文搜索引擎,那不可避免的是需要在第三方全文搜索引擎中也保存一份数据。...经过验证,第三方全文搜索引擎的导入性能要低于 Nebula 自身的数据导入性能,为了不影响 Nebula 自身的数据导入性能,我们通过异步数据同步的方案来进行第三方全文搜索引擎的数据导入工作。

    1.1K00

    微信全文搜索优化之路

    前言 ---- 基于本地数据的全文搜索(Full-Text-Search,FTS)在移动应用上扮演着重要的角色。...业务独立性 微信的核心业务是联系人和消息,而微信全文搜索无论是在建立索引、更新索引或者删除索引时,都需要处理大量数据,为了使得全文搜索不影响微信的核心业务,采用如下的存储架构: 独立DB、读写分离:微信全文搜索在整体架构上独立于主业务...我们统计过,从微信5.4版本到6.5.7版本,微信全文搜索各个任务的平均搜索时间增长超过10倍,给微信全文搜索带来巨大挑战。...这个分词规则的原因主要是在微信对全文搜索的结果排序需求主要是其他的属性排序,并非依据文档的相关性排序。即,全文搜索部分只需要找到存在关键词的文档,并不关心文档中存在几个关键词。...最后的SQL如下: 特殊优化——聊天记录搜索优化 微信全文搜索中有一个比较特殊的搜索任务,就是聊天记录。

    1.8K20

    微信全文搜索优化之路

    前言 基于本地数据的全文搜索(Full-Text-Search,FTS)在移动应用上扮演着重要的角色。...业务独立性 微信的核心业务是联系人和消息,而微信全文搜索无论是在建立索引、更新索引或者删除索引时,都需要处理大量数据,为了使得全文搜索不影响微信的核心业务,采用如下的存储架构: 独立DB、读写分离:微信全文搜索在整体架构上独立于主业务...我们统计过,从微信5.4版本到6.5.7版本,微信全文搜索各个任务的平均搜索时间增长超过10倍,给微信全文搜索带来巨大挑战。...这个分词规则的原因主要是在微信对全文搜索的结果排序需求主要是其他的属性排序,并非依据文档的相关性排序。即,全文搜索部分只需要找到存在关键词的文档,并不关心文档中存在几个关键词。...最后的SQL如下: 特殊优化——聊天记录搜索优化 微信全文搜索中有一个比较特殊的搜索任务,就是聊天记录。

    9.3K42

    DSL查询之全文搜索详解

    标题 title 字段是一个 string 类型( analyzed )已分析的全文字段,这意味着查询字符串本身也应该被分析。 分析查询字符串 。 将查询的字符串 QUICK!...frequency,即词 quick 在所有文档的 title 字段中出现的频率),以及字段的长度(即字段越短相关度越高)相结合的计算方式。...我们可以将其设置为某个具体数字,更常用的做法是将其设置为一个百分数,因为我们无法控制用户搜索时输入的单词数量: GET /test-dsl-match/_search { "query": {...无论这个值设置成什么,至少包含一个词项的文档才会被认为是匹配的。...然后查询在返回匹配的文档之前独立分析每个拆分的文本。 可以使用该query_string查询创建一个复杂的搜索,其中包括通配符,跨多个字段的搜索等等。

    19410

    深入解析RedisSearch:全文搜索的新维度

    一、什么是 RedisSearch RedisSearch 是 Redis 的一个模块,它提供了全文搜索的功能,允许开发者在 Redis 数据库中执行复杂的搜索查询。...二、RedisSearch 的核心特性 全文搜索:支持对存储在 Redis 中的数据进行全文搜索,无论是简单的字符串还是复杂的文档结构。...分面搜索:支持基于属性的分面搜索,用户可以根据不同的属性对搜索结果进行过滤和排序。 自定义评分:允许开发者根据业务需求自定义搜索结果的评分算法。...高级搜索功能 RedisSearch 提供了丰富的查询语法,可以执行更复杂的搜索操作。以下是一些高级搜索功能的示例。...结语 RedisSearch 为 Redis 带来了强大的全文搜索功能,使得开发者能够轻松地在 Redis 数据库中执行复杂的搜索查询。

    1.2K10
    领券