博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
15_ElasticSearch copy_to定制组合field进行cross-fields搜索
阅读量:3728 次
发布时间:2019-05-22

本文共 2128 字,大约阅读时间需要 7 分钟。

15_ElasticSearch copy_to定制组合field进行cross-fields搜索

更多干货

概述:

用most_fields策略,去实现cross-fields搜索 问题:

  • 只是找到尽可能多的field匹配的doc,而不是某个field完全匹配的doc
  • most_fields,没办法用minimum_should_match去掉长尾数据,就是匹配的特别少的结果
  • TF/IDF算法,比如Peter Smith和Smith Williams,搜索Peter Smith的时候,由于first_name中很少有Smith的,所以query在所有document中的频率很低,得到的分数很高,可能Smith Williams反而会排在Peter Smith前面

用copy_to 去实现cross-fields搜索

  • 用copy_to,将多个field组合成一个field
  • 问题其实就出在有多个field,有多个field以后,就很尴尬,我们只要想办法将一个标识跨在多个field的情况,合并成一个field即可。
  • 比如说,一个人名,本来是first_name,last_name,现在合并成一个full_name,不就ok了吗。

例子

  • 增加 new_author_full_name 字段
PUT /forum/_mapping/article{  "properties": {      "new_author_first_name": {          "type":     "string",          "copy_to":  "new_author_full_name"       },      "new_author_last_name": {          "type":     "string",          "copy_to":  "new_author_full_name"       },      "new_author_full_name": {          "type":     "string"      }  }}

用了这个copy_to语法之后,就可以将多个字段的值拷贝到一个字段中,并建立倒排索引

POST /forum/article/_bulk{ "update": { "_id": "1"} }{ "doc" : {
"new_author_first_name" : "Peter", "new_author_last_name" : "Smith"} } --> Peter Smith{ "update": { "_id": "2"} } { "doc" : {
"new_author_first_name" : "Smith", "new_author_last_name" : "Williams"} } --> Smith Williams{ "update": { "_id": "3"} }{ "doc" : {
"new_author_first_name" : "Jack", "new_author_last_name" : "Ma"} } --> Jack Ma{ "update": { "_id": "4"} }{ "doc" : {
"new_author_first_name" : "Robbin", "new_author_last_name" : "Li"} } --> Robbin Li{ "update": { "_id": "5"} }{ "doc" : {
"new_author_first_name" : "Tonny", "new_author_last_name" : "Peter Smith"} } --> Tonny Peter Smith

查询:

GET /forum/article/_search{  "query": {    "match": {      "new_author_full_name":       "Peter Smith"    }  }}

解决了most_fields策略 存在的问题

  • 只是找到尽可能多的field匹配的doc,而不是某个field完全匹配的doc --> 解决,最匹配的document被最先返回
  • most_fields,没办法用minimum_should_match去掉长尾数据,就是匹配的特别少的结果 --> 解决,可以使用minimum_should_match去掉长尾数据
  • TF/IDF算法,比如Peter Smith和Smith Williams,搜索Peter Smith的时候,由于first_name中很少有Smith的,所以query在所有document中的频率很低,得到的分数很高,可能Smith Williams反而会排在Peter Smith前面 --> 解决,Smith和Peter在一个field了,所以在所有document中出现的次数是均匀的,不会有极端的偏差

更多相关文章

转载地址:http://ieonn.baihongyu.com/

你可能感兴趣的文章
用nginx做反向代理
查看>>
史上最易部署lvs集群-tun模式
查看>>
python进程,线程,协程
查看>>
python网络编程
查看>>
你值得拥有的linux下的网络io 同步/异步/阻塞/非阻塞/BIO/NIO/AIO
查看>>
nginx日志文件配置
查看>>
HTTP over SSL/TLS
查看>>
CentOS安装fortune+cowsay
查看>>
用vue创建一个项目
查看>>
$listeners与.native的使用
查看>>
熟悉Linux 下静态库.a 与.so 库文件的生成与使用——实例
查看>>
算法训练 1的个数(输入正整数n,判断从1到n之中,数字1一共要出现几次。例如1123这个数,则出现了两次1。例如15,那么从1到15之中,一共出现了8个1。)
查看>>
算法训练 素因子去重(给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1)
查看>>
算法训练 二进制数数( 给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。   如5的二进制为101,包含2个“1”。)
查看>>
宏定义max函数的相关用法,与函数定义max函数的区别!最详细!!!
查看>>
第十届MathorCup高校数学建模D题解题思路
查看>>
2020年高教社杯全国大学生数学建模竞赛赛题 C题分析与思路!(持续更新)
查看>>
2020年高教社杯全国大学生数学建模竞赛赛题 B题分析与思路!(持续更新)
查看>>
蓝桥杯真题 18省4-测试次数 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。 各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐
查看>>
蓝桥杯真题 19省3-数列求值 给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求第 20190324 项的最后 4 位数字。
查看>>