Elasticsearch - 理解字段分析过程(_analyze与_explain)
来源:互联网 发布:win7 64 windows文件夹 编辑:程序博客网 时间:2024/06/13 22:26
我们常常会遇到问题,为什么指定的文档没有被搜索到。很多情况下, 这都归因于映射的定义和分析例程配置存在问题。针对分析过程的调试,ElasticSearch提供了专用的REST API。
_analyze, _explain是Elasticsearch提供的辅助API,经常不为人所知和所用。_explain 用来帮助分析文档的relevance score是如何计算出来的,而_analyze是Elasticsearch一个非常有用的API,它可以帮助你分析每一个field或者某个analyzer/tokenizer是如何分析和索引一段文字。
一、_analyze
例如, 下面例子用test索引默认analyzer来分析 "xi fei jian"
GET /test/_analyze?text="xi fei jian"
执行结果:
{
"tokens": [
{
"token": "xi",
"start_offset": 1,
"end_offset": 3,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "fei",
"start_offset": 4,
"end_offset": 7,
"type": "<ALPHANUM>",
"position": 2
},
{
"token": "jian",
"start_offset": 8,
"end_offset": 12,
"type": "<ALPHANUM>",
"position": 3
}
]
}
当然,你也可以用指定的analyzer来分析,例如:GET /test/_analyze?analyzer=whitespace&text=xi fei jian,这里的analyzer可以是系统默认分析器,也可以是自定义分析器。
此外, 你还可以使用指定field的analyzer来分析,例如:GET/test/_analyze?field=typename.fieldname&text=xi fei jian
还有另一种可以设置分词器(tokenizer)和过滤器的分析API,在我们试图创建目标映射之前进行配置时就会非常方便。例如:
curl -XGET ‘localhost:9200/addressbook/_analyze?tokenizer=whitespace&filters=lowcase,engram&pretty' -d 'John Smith'
可以看到,在跟踪映射配置中的BUG时,分析API是比较有用的,它可以告诉我们分析器如何工作、会产生哪些词项,以及这些词项的属性。有了这些信息,分析、解决查询问题时会更容易追查原因。
二、_explain
以上是对查询和分析过程进行说明,对于解释查询部分(好像和mysql挺像的哇~~),我们可以使用_explain向ElasticSearch询问庆于该文档是如何匹配(或者没有匹配上)的解释信息。例如,该文档能否在给定的查询中被检索到?如果找到了,ElasticSearch将返回分值计算的详细悠 ,以解释为什么该文档会匹配成功。
GET /us/tweet/12/_explain?pretty&q=honeymoon,可以得到如下结果:
"_explanation": {
"description": "weight(tweet:honeymoon in 0)
[PerFieldSimilarity], result of:",
"value": 0.076713204,
"details": [
{
"description": "fieldWeight in 0, product of:",
"value": 0.076713204,
"details": [
{
"description": "tf(freq=1.0), with freq of:",
"value": 1,
"details": [
{
"description": "termFreq=1.0",
"value": 1
}
]
},
{
"description": "idf(docFreq=1, maxDocs=1)",
"value": 0.30685282
},
{
"description": "fieldNorm(doc=0)",
"value": 0.25,
}
]
}
]
}
看起来有点复杂,这里最重要的内容就是对文档计算得到的总分,如果总分等于0,则该文档将不能匹配给定的查询。另一个重要内容是关于不同打分项的描述信息。根据查询类型的不同,打分项会以不同方式对最后得分产生影响。
从上面termFreq=1表明检索的词项在该字段下只出现了一次;maxDocs=1,说明依据指定的检索词项只找到了一个文档。
官方文档:https://www.elastic.co/guide/en/elasticsearch/guide/2.x/relevance-intro.html#explain-api
- Elasticsearch - 理解字段分析过程(_analyze与_explain)
- Elasticsearch _analyze, _explain和 _search_shards工具
- elasticsearch笔记_字段(名词)类型_分析过程(三)
- Elasticsearch 分片交互过程分析
- Elasticsearch 分片交互过程分析
- Elasticsearch 分片交互过程分析
- [ElasticSearch]分析与分析器
- ElasticSearch-映射与分析
- ElasticSearch(六)-映射和分析过程
- elasticsearch源码分析之启动过程
- Elasticsearch源码分析之二------索引过程源码概要分析
- ElasticSearch源码分析之二:索引过程源码概要分析
- Elasticsearch映射(mapping)与分析(analysis)
- Linux内核分析:理解进程调度时机跟踪分析进程调度与进程切换的过程
- Elasticsearch源码分析九--查询解析器QueryParser注册过程
- Elasticsearch源码分析十一--查询分析器Analyzer注册过程
- elasticsearch源码分析之启动过程(二)
- elasticsearch源码分析之启动过程(二)
- Android检验应用是否获取某项权限
- Object 源码分析
- Java中split的用法
- python3.4+django1.9+mysql5.6环境之hello world
- 自定义控件:滚动的TextView跑马灯
- Elasticsearch - 理解字段分析过程(_analyze与_explain)
- Linux下gcc 优化等级的介绍
- 升级10.11后使用CocoaPod出现-bash: pod: command not found 解决办法
- 反转字符串的单词
- 点击图片就可以完成上传功能
- 大整数的阶乘
- 热身赛-ZZULIOJ-1871-NO offer
- Neural Networks and Deep Learning By Michael Nielsen
- CentOS6下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)