全文搜索-介绍-elasticsearch-definitive-guide翻译

全文搜索

我们通过前文的简单例子,已经了解了结构化数据的条件搜索;现在,让我们来了解全文搜索-- 怎样通过匹配所有域的文本找到最相关的文章。

关于全文搜索有两个最重要的方面:

相似度计算
通过TF/IDF (see [relevance-intro]),地理位置接近算法,模糊相似度算法或者其他算法,用来给给定查询条件的结果排序。
文本分析
通过把文本切割和归一化后的词元,去(a)生成倒排索引,或者去(b)查询倒排索引。

当我们在讨论相似度计算和文本分析的时候,我们只是在讨论查询,而不是过滤

词条搜索 vs. 全文搜索

即使所有的查询都要执行一些相似度排序,但是不是所有的查询条件都需要文本分析。 因为有些特殊的查询就不是在文本上执行的,列如boolfunction_score
它们是boolean查询和数值查询。文本查询可以分为两个种类:

词条查询

低级别的termfuzzy查询没有文本分析,它们只是在单个词条上查询。列如词条"Foo"term查询,
是在倒排索引种查找完全匹配的词条,然后给每一篇包含这个词条的文章做TF/IDF相似度打分。

记住:词条"Foo"term查询只是在倒排索引里查找完全匹配的词条,它不会匹配到"foo"或者"FOO"
当你在not_analyzed的域用["Foo","Bar"]生成索引,或者在用whitespace分析器的域用"Foo
Bar"
生成索引, 它们都会在倒排索引里生成两个词元"Foo""Bar"

全文查询

高级别的matchquery_string查询能够理解这些域的映射:
* 如果在dateinteger属性的域,查询文本会被当日期或者整数来对待。
* 如果在(not_analyzed)属性的文本域,查询文本会被当做一个词条来查询。 * 但是,如果在(analyzed)属性的文本域,查询文本会用恰当得分析器去产生词条,而这些词条都会被用来查询。
一旦查询得到这些词条,它就用适当的低级查询去执行每一个词条,然后用查询结果计算每一篇文章的相似度打分。 我们将在后面的章节中详细介绍这个过程。

通常,你几乎都不会直接用到基于词元的查询,更多的,你会用更方便的高级全文查询(其实内部是用基于词元的查询)

当你想在not_analyzed域查询完全匹配值的时候,你应该考虑一下你到底是用查询还是过滤。 因为单词条查询通常被表示为二元值yes|no,所以过滤能更好的表达它们。你能从这里收益的 filter
caching
:

GET /_search
{
    "query": {
        "filtered": {
            "filter": {
                "term": { "gender": "female" }
            }
        }
    }
}

博客已搬家

原文链接:http://www.callmer.com/?p=43

全文搜索-介绍-elasticsearch-definitive-guide翻译

时间: 2024-10-27 15:58:22

全文搜索-介绍-elasticsearch-definitive-guide翻译的相关文章

全文搜索之 Elasticsearch

概述 Elasticsearch (ES)是一个基于 Lucene 的开源搜索引擎,它不但稳定.可靠.快速,而且也具有良好的水平扩展能力,是专门为分布式环境设计的. 特性 安装方便:没有其他依赖,下载后安装非常方便:只用修改几个参数就可以搭建起来一个集群 JSON:输入/输出格式为 JSON,意味着不需要定义 Schema,快捷方便 RESTful:基本所有操作(索引.查询.甚至是配置)都可以通过 HTTP 接口进行 分布式:节点对外表现对等(每个节点都可以用来做入口):加入节点自动均衡 多租户

全文搜索知识点概要(思维导图)

引言 文章(全文搜索引擎 ElasticSearch 还是 Solr?) 这篇文章总结的很好, 将全文搜索的知识点总结的很有条理,为了更好的理解,我专门根据文章内容整理了一个思维导图,期望能对学习全文搜索 和 elasticsearch 的同学提供一个指导. 思维导图 系列文章列表 Elasticsearch 系列文章汇总(持续更新...) 原文地址:https://www.cnblogs.com/reycg-blog/p/10048815.html

全文搜索存储引擎 Elasticsearch 一点点

开始请大家想一个问题,如何统计一个Web站点的有效PV? 针对用户请求的URL,统计时做模式匹配-------->即用户真正去打开一个站点的有效页面并对每个页面的入口的访问做一个统计浏览量: 简要搜索引擎 搜索引擎在互联网上特别多有专业(Startpage,Google,Yahoo,Baidu)等也有非专业开源(北大搜索.任何基于Lucene库的二次开发搜索代理引擎)等:其重点都是用来做海量数据搜索存储.分析,并且根据用户指定的filter来过滤出用户所需要的数据.而背后所需基础组件无外乎是 索

12章 搜索框架ElasticSearch介绍和整合SpringBoot 4节课

1.搜索引擎知识和搜索框架elasticsearch基本介绍     简介:通过京东电商 介绍什么是搜索引擎,和开源搜索框架ElasticSearch6.x新特性介绍 前言:介绍ES的主要特点和使用场景,新特性讲解         mysql:like 模糊,性能问题, solr:针对企业,Lucene         elasticsearch:针对数据量特别大,PB,TB           纯java开发,springboot使用,5.6版本           es升级4->5版本,改动

ElasticSearch基础3:全文搜索

全文搜索 所有查询会或多或少的执行相关度计算,但不是所有查询都有分析阶段.和一些特殊的完全不会对文本进行操作的查询(如 bool 或 function_score )不同,文本查询可以划分成两大家族: 基于词项的查询 如 term 或 fuzzy 这样的底层查询不需要分析阶段,它们对单个词项进行操作.用 term 查询词项 Foo 只要在倒排索引中查找 准确词项 ,并且用 TF/IDF 算法为每个包含该词项的文档计算相关度评分 _score .记住 term 查询只对倒排索引的词项精确匹配,这点

[Elasticsearch] 全文搜索 (二) - 多词查询及查询的合并

多词查询(Multi-word Queries) 如果我们一次只能搜索一个词,那么全文搜索就会显得相当不灵活.幸运的是,通过match查询来实现多词查询也同样简单: GET /my_index/my_type/_search { "query": { "match": { "title": "BROWN DOG!" } } } 以上的查询会返回所有的四份文档: { "hits": [ { "_id

ASP.NET Web API + Elasticsearch 6.x 快速做个全文搜索

最近想做个全文搜索,设想用 ASP.NET Web API + Elasticsearch 6.x 来实现. 网上搜了下 Elasticsearch 的资料,大部分是讲 linux 平台下如何用 java 来开发,有少量讲在 windows 平台下用 c# 开发的,且版本是 Elasticsearch 5.x .无奈上官网撸串,这里梳理下官网的教程,希望对大家有所帮助. 一.Elasticsearch 的安装 下载  MSI(https://artifacts.elastic.co/downlo

Elasticsearch 全文搜索

1,匹配查询(match) match查询主要的应用场景是进行全文搜索: // 1,初始化数据 DELETE /my_index PUT /my_index { "settings": { "number_of_shards": 1 }} POST /my_index/my_type/_bulk { "index": { "_id": 1 }} { "title": "The quick brow

ElasticSearch结构化搜索和全文搜索

https://segmentfault.com/a/1190000019753737?utm_source=tag-newest 1.结构化搜索 1.1 精确值查找 过滤器很重要,因为它们执行速度非常快,不会计算相关度(直接跳过了整个评分阶段)而且很容易被缓存.请尽可能多的使用过滤式查询. term 查询会查找我们指定的精确值.作为其本身, term 查询是简单的.它接受一个字段名以及我们希望查找的数值:{ "term" : { "price" : 20 } }