Elasticsearch: 权威指南 » 深入搜索 » 多字段搜索 » 多数字段 good

  跨字段实体搜索  »

多数字段编辑

全文搜索被称作是 召回率(Recall) 与 精确率(Precision) 的战场: 召回率 ——返回所有的相关文档;精确率 ——不返回无关文档。目的是在结果的第一页中为用户呈现最为相关的文档。

为了提高召回率的效果,我们扩大搜索范围 ——不仅返回与用户搜索词精确匹配的文档,还会返回我们认为与查询相关的所有文档。如果一个用户搜索 “quick brown box” ,一个包含词语 fast foxes 的文档被认为是非常合理的返回结果。

如果包含词语 fast foxes 的文档是能找到的唯一相关文档,那么它会出现在结果列表的最上面,但是,如果有 100 个文档都出现了词语 quick brown fox ,那么这个包含词语 fast foxes 的文档当然会被认为是次相关的,它可能处于返回结果列表更下面的某个地方。当包含了很多潜在匹配之后,我们需要将最匹配的几个置于结果列表的顶部。

提高全文相关性精度的常用方式是为同一文本建立多种方式的索引, 每种方式都提供了一个不同的相关度信号 signal 。主字段会以尽可能多的形式的去匹配尽可能多的文档。举个例子,我们可以进行以下操作:

  • 使用词干提取来索引 jumps 、 jumping 和 jumped 样的词,将 jump 作为它们的词根形式。这样即使用户搜索 jumped ,也还是能找到包含 jumping 的匹配的文档。
  • 将同义词包括其中,如 jump 、 leap 和 hop 。
  • 移除变音或口音词:如 ésta 、 está 和 esta 都会以无变音形式 esta 来索引。

尽管如此,如果我们有两个文档,其中一个包含词 jumped ,另一个包含词 jumping ,用户很可能期望前者能排的更高,因为它正好与输入的搜索条件一致。

为了达到目的,我们可以将相同的文本索引到其他字段从而提供更为精确的匹配。一个字段可能是为词干未提取过的版本,另一个字段可能是变音过的原始词,第三个可能使用 shingles 提供 词语相似性 信息。这些附加的字段可以看成提高每个文档的相关度评分的信号 signals ,能匹配字段的越多越好。

一个文档如果与广度匹配的主字段相匹配,那么它会出现在结果列表中。如果文档同时又与 signal 信号字段匹配,那么它会获得额外加分,系统会提升它在结果列表中的位置。

我们会在本书稍后对同义词、词相似性、部分匹配以及其他潜在的信号进行讨论,但这里只使用词干已提取(stemmed)和未提取(unstemmed)的字段作为简单例子来说明这种技术。

多字段映射编辑

首先要做的事情就是对我们的字段索引两次: 一次使用词干模式以及一次非词干模式。为了做到这点,采用 multifields 来实现,已经在 multifields 有所介绍:

DELETE /my_index

PUT /my_index
{
    "settings": { "number_of_shards": 1 }, 

    "mappings": {
        "my_type": {
            "properties": {
                "title": { 

                    "type":     "string",
                    "analyzer": "english",
                    "fields": {
                        "std":   { 

                            "type":     "string",
                            "analyzer": "standard"
                        }
                    }
                }
            }
        }
    }
}

拷贝为 CURL在 SENSE 中查看 



参考 被破坏的相关度.



title 字段使用 english 英语分析器来提取词干。



title.std 字段使用 standard 标准分析器,所以没有词干提取。

接着索引一些文档:

PUT /my_index/my_type/1
{ "title": "My rabbit jumps" }

PUT /my_index/my_type/2
{ "title": "Jumping jack rabbits" }

拷贝为 CURL在 SENSE 中查看 

这里用一个简单 match 查询 title 标题字段是否包含 jumping rabbits (跳跃的兔子):

GET /my_index/_search
{
   "query": {
        "match": {
            "title": "jumping rabbits"
        }
    }
}

拷贝为 CURL在 SENSE 中查看 

因为有了 english 分析器,这个查询是在查找以 jump 和 rabbit 这两个被提取词的文档。两个文档的 title 字段都同时包括这两个词,所以两个文档得到的评分也相同:

{
  "hits": [
     {
        "_id": "1",
        "_score": 0.42039964,
        "_source": {
           "title": "My rabbit jumps"
        }
     },
     {
        "_id": "2",
        "_score": 0.42039964,
        "_source": {
           "title": "Jumping jack rabbits"
        }
     }
  ]
}

如果只是查询 title.std 字段,那么只有文档 2 是匹配的。尽管如此,如果同时查询两个字段,然后使用 bool 查询将评分结果 合并 ,那么两个文档都是匹配的( title 字段的作用),而且文档 2 的相关度评分更高( title.std 字段的作用):

GET /my_index/_search
{
   "query": {
        "multi_match": {
            "query":  "jumping rabbits",
            "type":   "most_fields", 

            "fields": [ "title", "title.std" ]
        }
    }
}

拷贝为 CURL在 SENSE 中查看 



我们希望将所有匹配字段的评分合并起来,所以使用 most_fields 类型。这让 multi_match 查询用 bool 查询将两个字段语句包在里面,而不是使用 dis_max 查询。

{
  "hits": [
     {
        "_id": "2",
        "_score": 0.8226396, 

        "_source": {
           "title": "Jumping jack rabbits"
        }
     },
     {
        "_id": "1",
        "_score": 0.10741998, 

        "_source": {
           "title": "My rabbit jumps"
        }
     }
  ]
}

 


文档 2 现在的评分要比文档 1 高。

用广度匹配字段 title 包括尽可能多的文档——以提升召回率——同时又使用字段 title.std 作为 信号 将相关度更高的文档置于结果顶部。

每个字段对于最终评分的贡献可以通过自定义值 boost 来控制。比如,使 title 字段更为重要,这样同时也降低了其他信号字段的作用:

GET /my_index/_search
{
   "query": {
        "multi_match": {
            "query":       "jumping rabbits",
            "type":        "most_fields",
            "fields":      [ "title^10", "title.std" ] 

        }
    }
}

拷贝为 CURL在 SENSE 中查看 



title 字段的 boost 的值为 10 使它比 title.std 更重要。

 

https://www.elastic.co/guide/cn/elasticsearch/guide/current/most-fields.html

 

时间: 2025-01-26 17:55:33

Elasticsearch: 权威指南 » 深入搜索 » 多字段搜索 » 多数字段 good的相关文章

Ansible权威指南.

Linux/Unix技术丛书 Ansible权威指南 李松涛 魏 巍 甘 捷 著 图书在版编目(CIP)数据 Ansible权威指南 / 李松涛,魏巍,甘捷著. -北京:机械工业出版社,2016.11 (Linux/Unix技术丛书) ISBN 978-7-111-55329-8 I. A- II. ①李- ②魏- ③甘- III. 程序开发工具-指南 IV. TP311.561-62 中国版本图书馆CIP数据核字(2016)第258615号 Ansible权威指南 出版发行:机械工业出版社(北

《ELK Stack权威指南 》第2章 插件配置

本节书摘来自华章出版社<ELK Stack权威指南 >一书中的第1章,第2节,作者饶琛琳,更多章节内容可以访问"华章计算机"公众号查看. 插 件 配 置 插件是Logstash最大的特色.各种不同的插件源源不断地被创造出来,发布到社区中供大家使用.本章会按照插件的类别,对一般场景下的一些常用插件做详细的配置和用例介绍.本章介绍的插件包括:1)输入插件.基于shipper端场景,主要介绍STDIN.TCP.File等插件.2)编解码插件.编解码通常是会被遗忘的环节,但是运用好

《ELK Stack权威指南 》第3章 场景示例

本节书摘来自华章出版社<ELK Stack权威指南 >一书中的第1章,第3节,作者饶琛琳,更多章节内容可以访问"华章计算机"公众号查看. 场 景 示 例 前面虽然介绍了几十个Logstash插件的常见配置项,但是过多的选择下,如何组合使用这些插件,依然是一部分用户的难题.本章将列举一些最常见的日志场景,演示针对性的组件搭配,希望能给读者带来启发. 本章介绍的场景包括:Nginx访问日志.Nginx错误日志.Postfix日志.Ossec日志.Windows系统日志.Java

《ELK Stack权威指南(第2版)》一导读

Preface前 言 <ELK Stack权威指南>第1版面世之后的这一年多时间里,ELK Stack在Elastic.co公司以及社区的共同努力下飞速发展.国内外都出现了不少基于ELK Stack实现的日志分析产品和创业公司.ELK Stack已经成为DevOps技术栈中必不可缺少的一个部分,较大型的互联网公司甚至已经配备有专职的ELK Stack管理团队. 对于并不精通ELK Stack技术及其发展历史的人来说,过去复杂的版本对应是新手的第一道门槛.最近全新更新的ELK Stack各组件,

Struts2权威指南

Struts2权威指南里介绍,并结合笔者在此之前也用过webwork和struts1,不过还是对webwork更熟一 些,好在struts2比较接近webwork,所以学习成本相对不高,struts2的好处就不说了,说说差异吧. 1.相对struts1而言,没有了formbean,表单代码不需要一定要使用struts提供的html标签,一般的 html表单标签照样可以使用,耦合度学习成本都低了很多.想想struts1,不用它自身提供的html标签, 表单元素就不能注入,除action外,还得另外

vfp-哪里有“Visual FoxPro权威指南写作原稿及光盘”

问题描述 哪里有"Visual FoxPro权威指南写作原稿及光盘" "Visual FoxPro权威指南写作原稿及光盘",此书哪里还能买到. 解决方案 搜索第一条就是: http://blog.csdn.net/zhanghongju/article/details/38748457 解决方案二: http://blog.csdn.net/zhanghongju/article/details/41020107

详解JavaScript权威指南之对象_javascript技巧

JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删. JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等. JavaScript对象除了可以保持自有的属性外,还可以从一个称为原型的对象继承属性.对象的方法通常是继承的属性.这种"原型式集成"是JavaScript的的核心特征. 1.创建对象 第一种:对象直接量表示法创建对象. 这是最简单的对象创建方式,对象直接量由若干key:value键值对属性组成,属性之间用逗号分隔,整个对象用花

《Windows 8 权威指南》——1.5 版本对比

1.5 版本对比 Windows 8 权威指南 当今电脑操作系统有许多的分支,总而言之分为三部分.其一是微软代表的Windows系统家族:其二是UNIX以及其分支Linux:其三就是苹果的Mac Os.本章我们主要对比一下Windows的几个版本之间的差别以及与Linux版本中最具代表性的Ubuntu的差别. 1.5.1 Ubuntu 12.04与Windows 8的对比 Ubuntu是目前最流行的Linux操作系统之一,最新的版本更新到了12.04.本节我们从以下几个方面来对比一下Window

《Windows 8 权威指南》——第1章 Windows 8已经到来的盛宴 1.1 Windows商店

第1章 Windows 8已经到来的盛宴 windows 8 是微软公司于 2012 年即将正式发布的新一代具有革命性变化的客户端操作系统.Windows 8设计的目标在于让人们的日常电脑操作更加简单和快捷,为人们提供高效易行的工作环境.它将支持来自Intel.AMD 和 ARM 的芯片架构.这一改变意味着Windows系统开始向更多平台迈进,包括平板电脑和PC.Windows Phone 8也将采用和Windows 8相同的内核. 2011年9月14日,Windows 8开发者预览版发布,宣布