主要知识点

  • 常规multi-field搜索结果分析
  • dis_max参数设置

 
 

一、为帖子数据增加content字段

 
 

POST /forum/article/_bulk

{ "update": { "_id": "1"} }

{ "doc" : {"content" : "i like to write best elasticsearch article"} }

{ "update": { "_id": "2"} }

{ "doc" : {"content" : "i think java is the best programming language"} }

{ "update": { "_id": "3"} }

{ "doc" : {"content" : "i am only an elasticsearch beginner"} }

{ "update": { "_id": "4"} }

{ "doc" : {"content" : "elasticsearch and hadoop are all very good solution, i am a beginner"} }

{ "update": { "_id": "5"} }

{ "doc" : {"content" : "spark is best big data solution based on scala ,an programming language similar to java"} }

 
 

二、多字段搜索(multi-field搜索)

1、搜索title或content中包含java或solution的帖子

GET /forum/article/_search

{

"query": {

"bool": {

"should": [

{ "match": { "title": "java solution" }},

{ "match": { "content": "java solution" }}

]

}

}

}

 
 

2、结果分析

 
 

期望的排在第一位是doc5,结果是doc2,doc4排在了前面。原因如下:

计算每个document的relevance score的方式是:每个query的分数,乘以matched query数量,除以总query数量

 
 

算一下doc4的分数

{ "match": { "title": "java solution" }},针对doc4,是有一个分数的,假设是1.1

{ "match": { "content": "java solution" }},针对doc4,也是有一个分数的,假设是1.2

所以是两个分数加起来是2.3,matched query数量 = 2,总query数量 = 2,计算的分数就是2.3 * 2 / 2 = 2.3

算一下doc5的分数

{ "match": { "title": "java solution" }},针对doc5,是没有分数的

{ "match": { "content": "java solution" }},针对doc5,是有一个分数,假设是2.3

matched query数量 = 1,总query数量 = 2,计算的分数就是2.3 * 1 / 2 = 1.15

通过计算发现:doc4两个field匹配到一个关键词,分数反而高,doc5一个field匹配到两个关键词,分数反而低了,这样不符合我们的预期。

 
 

三、best fields策略(dis_max参数设置)

best fields策略,就是说,搜索到的结果中,如果某一个field中匹配到了尽可能多的关键词,那么就应被排在前面;而不是尽可能多的field匹配到了少数的关键词排在前面。

dis_max语法,直接取多个query中,分数最高的那一个query的分数即可。

{ "match": { "title": "java solution" }},针对doc4,是有一个分数的,1.1

{ "match": { "content": "java solution" }},针对doc4,也是有一个分数的,1.2

取最大分数,1.2

{ "match": { "title": "java solution" }},针对doc5,是没有分数的

{ "match": { "content": "java solution" }},针对doc5,是有一个分数的,2.3

取最大分数,2.3

所以doc5就可以排在更前面的地方,符合我们的需要。

语法:

GET /forum/article/_search

{

"query": {

"dis_max": {

"queries": [

{ "match": { "title": "java solution" }},

{ "match": { "content": "java solution" }}

]

}

}

}

另一种写法:结果是一样的。

GET /forum/article/_search

{

"query": {

"dis_max": {

"tie_breaker": 0.7,

"boost": 1.2,

"queries": [

{"bool": {"should": [

{"match": {"title": "java solution"}},

{"match": {"content": "java solution"}}

]

}

}]

}

}

 
 

11.best fields策略(dis_max参数设置)的更多相关文章

  1. java jvm内存管理/gc策略/参数设置

    1. JVM内存管理:深入垃圾收集器与内存分配策略 http://www.iteye.com/topic/802638 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想 ...

  2. JVM系列三:JVM参数设置

    JVM系列三:JVM参数设置.分析   不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM.GC的参数,可以极大的减少由于GC工作,而导致的程序运 ...

  3. Elasticsearch学习之深入搜索三 --- best fields策略

    1. 为帖子数据增加content字段 POST /forum/article/_bulk { "} } { "doc" : {"content" : ...

  4. MP3 Lame 转换 参数 设置(转)

    我们在对音频格式的转换中,打交道最多的就是MP3了.如果你能彻底玩转MP3,那么对你的音频创作和对其他音频格式的掌握会有很大的帮助.下面我们给大家介绍MP3制作软件:LAME 要制作出高音质的MP3靠 ...

  5. jvm参数设置和性能调优

    1.Java虚拟机运行时的数据区 2.常用的内存区域调节参数 -Xms:初始堆大小,默认为物理内存的1/64(<1GB):默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40% ...

  6. jvm常用参数设置 专题

    在jdk8中 -Xms2g不合法,能通过的:-Xms2G #!/bin/bash JAVA_OPTS="-Xms4G -Xmx4G -XX:+HeapDumpOnOutOfMemoryErr ...

  7. Hibernate 参数设置一览表

    Hibernate 参数设置一览表 属性名 用途 hibernate.dialect 一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值 fu ...

  8. ORA-32004 参数设置过时的解决办法

    启动时报错: 查看日志: view /opt/oracle11g/app/db/diag/rdbms/yldev/yldev/trace/alert_yldev.log 原来是plsql_debug ...

  9. 【Reporting Services 报表开发】— 级联式参数设置

    级联式参数设置 再清楚的菜单,只要遇到选择项目一多的时候,难免会让人眼花缭乱,而找不到该选的选项.举例来说,像是零售业动辄万种商品品类,如果希望快速的选择到希望查看的产品品类时,就需要更有效率的搜索方 ...

随机推荐

  1. CoffeeScript的缩进

    CoffeeScript用缩进代替了花括符"{}",作用范围的划分只靠缩进.这带来代码精简.简洁的同时,有时候也让人困惑. 比如说: if 3 > 1 alert(" ...

  2. B2242 [SDOI2011]计算器

    这个题就是把三个数论基础合在了一起,算是一道比较全面的题. 1的时候就是快速幂 2的时候是exgcd求逆元,特殊的,只有两数互质才有逆元. 3就是bsgs啦,还是不太熟 题干: Description ...

  3. CF36 E Two Paths——欧拉(回)路

    题目:http://codeforces.com/contest/36/problem/E 给定一张无向图,要求输出两条欧拉路覆盖所有边: 分类讨论,首先判-1:有两个以上连通块 / 有四个以上奇度数 ...

  4. struts2里result类型Stream的参数配置

    转自:https://blog.csdn.net/q714699280/article/details/51756126 contentType 内容类型,和互联网MIME标准中的规定类型一致,例如t ...

  5. 7.2 高速缓冲存储器-Cache

    高速缓冲存储器:Cache.Cache的功能是提高CPU数据的输入和输出的速率.CPU的速度与主存的速度之间有巨大的差异.主存的存取时间.存取速度要比CPU的速度要慢了很多倍.为了调和它们之间的巨大速 ...

  6. EasyUI 之 easyui-datagrid 字段格式化

    后台返回的json格式: 列表字段要显示username 用户的真实姓名: formatter="formatterByUserName" <table id="d ...

  7. nodejs操作mysql

    var mysql = require('mysql');var pool = mysql.createPool({ host: 'localhost', user: 'root', password ...

  8. HIT1917Peaceful Commission(2-SAT)

    Peaceful Commission   Source : POI 2001   Time limit : 10 sec   Memory limit : 32 M Submitted : 2112 ...

  9. 对于Mobile模块化的概念认知(小白)

    最近刚刚学习了Mobile的一些基础知识,把它整理一下方便自己的学习 那什么是Mobile呢? 自己的理解是将一个项目中共同的部分抽出来,这样就形成了Mobile模块. 为什么要使用Mobile呢? ...

  10. easyui -tree的详细讲解

    代码的具体实现 @{    ViewBag.Title = "人员查找";    ViewBag.LeftWidth = "200px";    ViewBag ...