1、使用minimum_should_match参数

elasticsearch query中的minimum_should_match ,字面意思就很清晰了,就是最小匹配度,但是它却有很多种配置方式。
正向匹配度比如 "minimum_should_match":3 官方原文解释是:Indicates a fixed value regardless of the number of optional clauses.
这里要说明一下为什么是optional clauses(翻译为可选的子句),因为对于被analyzer分解出来的每一个term都会构造成一个should的bool query的查询,每个term变成一个term query子句。
例如"query": "how not to be",被解析成:
{
  "bool": {
    "should": [
      { "term": { "body": "how"}},
      { "term": { "body": "not"}},
      { "term": { "body": "to"}},
      { "term": { "body": "be"}}
    ],
    "minimum_should_match": 3
  }
}
(注:在bool query中minimum_should_match只能紧跟在should的后面,放其他地方会出异常)

或者 "minimum_should_match":75%,可以配置一个一个百分比,至少optional clauses至少满足75%,这里是向下取整的。
比如有5个clause,5*75%=3.75,向下取整为3,也就是至少需要match 3个clause。

逆向匹配和正向匹配相反,比如我们可以近似理解为-25%和75%表示的是一个意思,但是有些小小的差异,比如有5个clause,逆向匹配-25%,5*25%=1.25,取整是1,5-1=4,即要匹配4个clause,而75%算出来是3个clause。

例如:

term(job,“”销售经理“”)结果可能会出现:促销员或者是4S店经理/维修站经理等

如果使用:QueryBuilders.matchQuery(job,“”销售经理“”).minimumShouldMatch("90%")  则不会出现。

因为销售经理经过分词会出现:

{
tokens: [
{
token: "销售",
start_offset: 0,
end_offset: 2,
type: "CN_WORD",
position: 0
},
{
token: "销",
start_offset: 0,
end_offset: 1,
type: "CN_WORD",
position: 1
},
{
token: "售",
start_offset: 1,
end_offset: 2,
type: "CN_WORD",
position: 2
},
{
token: "经理",
start_offset: 2,
end_offset: 4,
type: "CN_WORD",
position: 3
}
]
}

配置了匹配度最少为90% 意味着召回的doc中至少有 4*0.9=3.6向下取整3个词条才可以。

2、使用短语查询

QueryBuilders.matchPhraseQuery(field, value).slop(2)

表示将value分词后中间允许存在两个分词结果的词条;如原句子是:

我是你们公司部门的经理

经过分词后:

{
tokens: [
{
token: "我",
start_offset: 0,
end_offset: 1,
type: "CN_CHAR",
position: 0
},
{
token: "你们",
start_offset: 2,
end_offset: 4,
type: "CN_WORD",
position: 1
},
{
token: "公司",
start_offset: 4,
end_offset: 6,
type: "CN_WORD",
position: 2
},
{
token: "部门",
start_offset: 6,
end_offset: 8,
type: "CN_WORD",
position: 3
},
{
token: "经理",
start_offset: 9,
end_offset: 11,
type: "CN_WORD",
position: 4
}
]
}

QueryBuilders.matchPhraseQuery(field, "我是经理").slop(2)

那么查不到,因为‘我是经理’分词后是我   经理;在这两个中间最多允许2个分词的词条。但是我是你们‘’我是你们公司部门的经理"在我   经理中间有3个词条,索引搜索不到。
QueryBuilders.matchPhraseQuery(field, "我是经理").slop(3)或者大于3也可以。

elasticsearch控制查询精准度相关推荐

  1. Elasticsearch学习之深入搜索一 --- 提高查询的精准度

    为帖子增加标题字段 POST /forum/article/_bulk { "update": { "_id": "1"} } { &quo ...

  2. Elasticsearch系列——全文搜索控制精准度

    作者专注于Java.架构.Linux.小程序.爬虫.自动化等技术. 工作期间含泪整理出一些资料,微信搜索[程序员高手之路],回复 [java][黑客][爬虫][小程序][面试]等关键字免费获取资料. ...

  3. 22_深度探秘搜索技术_手动控制全文检索(match)结果的精准度、基于boost的细粒度搜索条件实现权重控制...

    本文章收录于[Elasticsearch 系列],将详细的讲解 Elasticsearch 整个大体系,包括但不限于ELK讲解.ES调优.海量数据处理等 本博客以例子为主线,来说明在elasticse ...

  4. elasticsearch控制match执行过程的低级查询处理规则

    本篇文章主要说明match执行过程中的低级查询(bool term)以及涉及到评分规则(包括同义词).elasticsearch一些较复杂业 务查询中 match 多词和同义词搜索可能会遇到的问题. ...

  5. Elasticsearch深度探秘搜索技术如何手动控制全文检索结果的精准度

    为帖子数据增加标题字段 #插入数据 POST /post/_doc/_bulk { "update": { "_id": "1"} } { ...

  6. 19_ElasticSearch 使用match和近似匹配实现召回率与精准度的平衡

    19_ElasticSearch 使用match和近似匹配实现召回率与精准度的平衡 更多干货 分布式实战(干货) spring cloud 实战(干货) mybatis 实战(干货) spring b ...

  7. 白话Elasticsearch06- 深度探秘搜索技术之手动控制全文检索结果的精准度

    文章目录 概述 数据 小例子 搜索标题中包含java或elasticsearch的blog 搜索标题中包含java和elasticsearch的blog 搜索包含java,elasticsearch, ...

  8. 【Elasticsearch】Elasticsearch中的相似度评分介绍

    1.概述 转载:Elasticsearch中的相似度评分介绍 本文要点 相关性得分是一个搜索引擎的核心,了解它的工作原理对创建一个好的搜索引擎至关重要. Elasticsearch 使用了两种相似度评 ...

  9. ElasticSearch 高级查询语法

    ElasticSearch 高级查询语法Query DSL ES倒排索引 ES高级查询Query DSL 查询所有 match_all 分页查询form 深分页查询Scroll 指定字段排序sort ...

最新文章

  1. 第一部分:数据中心专业名词你知道多少?
  2. 开放搜索查询分析服务架构解读
  3. Java黑皮书课后题第4章:*4.15(电话键盘)电话上的国际标准字母/数字映射如下所示。编写程序,提示用户输入一个小写或大写字母,然后显示对应数字。对于非字母输入,提示非法输入
  4. A. The Miracle and the Sleeper(水题)
  5. Modularity(模块化-CMD规范)
  6. 荣耀 Magicbook Pro 锐龙版搭载深度操作系统桌面版
  7. pyinstaller相关错误
  8. Thinking in Java 16.3返回一个数组
  9. 统计字符串中汉字的个数,字符串中字符自然排序
  10. ubuntu16.04安装iNode客户端简易教程
  11. html5音乐播放器在线生成,一款极简的HTML5音乐播放器-skPlayer
  12. AVC与HEVC的差异-帧内预测
  13. python-爬取贴吧的时候表情的处理。
  14. 1+x 云计算平台运维与开发测试题
  15. JS实现倒计时精确到天数,时,分,秒或者精确到时、分、秒(小时数累加)
  16. 2022年危险化学品经营单位主要负责人及危险化学品经营单位主要负责人操作证考试
  17. [词性] 十八、介词 8 [ within ] [ within ] [ across ] [ among ] [ outside ] [ into ] [ beyond ] [ against ]
  18. 【指数编制系列二】数据标准化方法
  19. 时序分析基本概念介绍Scenario
  20. 观「招商银行」隐私计算布局的思考(36氪收录)

热门文章

  1. 使用ADB命令抓取手机日志——crash等无响应操作(adb bugreport > bugreport.txt 或 adb logcat -> F:/logcat.txt)
  2. java 蚁群算法_Java蚁群算法(Ant Colony)求解旅行商问题(TSP)(二)
  3. mysql 索引的目的是什么_SQL 创建索引的目的是什么?
  4. Python学习笔记---day07数据类型(下)
  5. 貌似潘安,情如宋玉,才胜子建 是什么意思?
  6. 记录一次header manipulation的解决
  7. element-ui的table表格实现跨页多选及回显效果
  8. Windows下的服务控制管理器(SCM)
  9. 域控服务器迁移步骤,AD域控制器迁移方法
  10. 【统计学01】概括性描述-集中趋势,离散程度,分布形状度量