13.一些重要的概念(2019-05-22)

1._source / _all / copy_to 详解:

1)._source:
默认情况下,ElasticSearch 里面有2份内容,一份是原始文档,也就是 _source 字段里的内容,我们在 Elasticsearch 中搜索文档,查看的文档内容就是 _source 中的内容。另一份是倒排索引,倒排索引中的数据结构是倒排记录表,记录了词项和文档之间的对应关系。

2)._all:
_all 字段里面包含了一个文档里面的所有信息,是一个超级字段。这个字段包含了其他字段的所有内容,各个字段用空格隔开。7.X 已废除,建议使用 copy_to 替代。

3).copy_to:
把原字段内容复制到目标字段,只是用来查询使用。建议在 7.X 中使用 copy_to 实现用户自定义的 _all 功能。
PUT /book
{
  "mappings": {
    "properties": {
    "content":{
             "type":"text",
             "copy_to":"all_text"
        },
         "title":{
             "type":"text",
             "copy_to":"all_text"
        },
        "all_text":{
             "type":"text"
        }

    }
  }
}

 


2.term / match / match_phare 的区别:

1).term查询:
term代表完全匹配,也就是精确查询,搜索前不会对搜索词进行分词,所以我们的搜索词必须是文档分词集合中的一个。比如查询条件是:
{
    "query":{
        "term":{
            "foo": "hello world"
        }
    }
}
那么只有在foo字段中存储了"hello world"的数据才会被返回。如果在存储时,使用了分词,原有的文本"I say hello world"会被分词进行存储,不会存在"hello  world"这整个词,那么不会返回任何值。但是如果使用"hello"作为查询条件,则只要foo字段中包含"hello"的数据都会被返回,分词对这个查询影响较大。

2).match查询:
match查询代表模糊匹配,会先对搜索词进行分词,分词完毕后再逐个对分词结果进行匹配,文档只要包含match查询条件的一部分就会被返回。因此跟 term 精确搜索相比,match 是分词匹配搜索。比如查询条件是:
{
    "query":{
        "match":{
            "foo": "hello world"
        }
    }
}
那么只要在foo字段中存储了 "hello" 或者 "world" 的数据都会被返回。

3).match_phase查询:
match_phase是短语匹配,查询确切的短语,在对查询字段定义了分词器的情况下,会使用分词器对输入进行分词,然后返回满足下述两个条件的文档:
①.match_phase 中的所有 term 都出现在待查询字段之中;
②.待查询字段之中的所有 term 都必须和 match_phase 具有相同的顺序。

{
    "query":{
        "match_phase":{
            "foo": "hello world"
        }
    }
}
如果原有的文本"I say hello world",则该文本将被搜索出来。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值