我们经常会遇到问题。为什么指定的文档没有被搜索到。许多情况下, 这都归因于映射的定义和分析例程配置存在问题。

针对分析过程的调试,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是比較实用的。它能够告诉我们分析器怎样工作、会产生哪些词项,以及这些词项的属性。有了这些信息,分析、解决查询问题时会更easy追查原因。

二、_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)的更多相关文章

  1. elasticsearch源码分析之search模块(client端)

    elasticsearch源码分析之search模块(client端) 注意,我这里所说的都是通过rest api来做的搜索,所以对于接收到请求的节点,我姑且将之称之为client端,其主要的功能我们 ...

  2. fluentd结合kibana、elasticsearch实时搜索分析hadoop集群日志<转>

    转自 http://blog.csdn.net/jiedushi/article/details/12003171 Fluentd是一个开源收集事件和日志系统,它目前提供150+扩展插件让你存储大数据 ...

  3. 一个DOS攻击木马的详细分析过程

    一个DOS攻击木马的详细分析过程 0×01 起因 网路流量里发现了大量的的1.exe的文件,而且一直在持续,第一感觉就像是一个木马程序,而且每个1.exe的MD5都不一样,对比发现只有几个字节不一样( ...

  4. SVM问题再理解与分析——我的角度

    SVM问题再理解与分析--我的角度 欢迎关注我的博客:http://www.cnblogs.com/xujianqing/ 支持向量机问题 问题先按照几何间隔最大化的原则引出他的问题为 上面的约束条件 ...

  5. 转 理解与分析ios应用的崩溃报告

    理解与分析ios应用的崩溃报告 源网址: http://developer.apple.com/library/ios/#technotes/tn2151/_index.html 当一个应用程序崩溃时 ...

  6. elasticsearch源码分析之search模块(server端)

    elasticsearch源码分析之search模块(server端) 继续接着上一篇的来说啊,当client端将search的请求发送到某一个node之后,剩下的事情就是server端来处理了,具体 ...

  7. 深入理解Linux启动过程

    深入理解Linux启动过程       本文详细分析了Linux桌面操作系统的启动过程,涉及到BIOS系统.LILO 和GRUB引导装载程序,以及bootsect.setup.vmlinux等映像文件 ...

  8. 【HANA系列】SAP HANA数据处理的理解与分析一

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA数据处理的理解与 ...

  9. django之数据模型类的字段分析

    一:表一的字段分析 class Sheep_Area(models.Model):# models.AutoField()自增列,要显示自定义的自增列,必须定义primary=True# area_i ...

随机推荐

  1. C#编程(三十八)----------运算符

    原文链接: http://blog.csdn.net/shanyongxu/article/details/46877353 运算符 类别 运算符 算术运算符 + - * / 逻辑运算符 &  ...

  2. 从零開始学android&lt;使用嵌套布局实现计算器界面.十七.&gt;

    所谓的嵌套布局就是在一个文件里嵌套多个布局文件 <span style="font-size:18px;"> <LinearLayout android:layo ...

  3. Tomcat集群下获取memcached缓存对象数量,统计在线用户数据量

    项目需要统计在线用户数量,系统部署在集群环境下,使用会话粘贴的方式解决Session问题.要想得到真实在线用户数,必须是所有节点的总和. 这里考虑使用memcached存放用户登录数据,key为use ...

  4. SQL中树形分层数据的查询优化

    在数据查询中,从2008开始SQL Server提供了一个新的数据类型hierarchyid,专门用来操作层次型数据结构. hierarchyid  类型对层次结构树中有关单个节点的信息进行逻辑编码的 ...

  5. [转]Nginx 502 PHP LNMP 502 终极解决方案 完美解决502 用 upstream 和 fastcgi_next_upstream 可以极大缓解

    转: http://xn--ghqyhzj.com/post-21537.html 本文针对LNMP的PHP 版本ver 5.3.6 or Higher,其它未测试过. 1. 使用不同端口或php-f ...

  6. 使用idea 在springboot添加本地jar包的方法本地运行有效,一旦需要打jar就会报错,这就需要在

    https://blog.csdn.net/huxiaodong1994/article/details/80702278 1.首先在与src同级的目录下新建一个lib目录,然后将本地jar包放在li ...

  7. Spring Data JPA @Column 注解无效 打出的语句有下划线

    最近再写一个Restful API的小例子,遇到这样一个问题,在Spring Boot 下使用CrudRepository,总是提示如下错误: Caused by: java.sql.SQLSynta ...

  8. SQL Server 数据库项目

    ylbtech-.NET Framework: SQL Server 数据库项目 SQL Server 数据库项目 类型:SQL Server 用于创建 SQL Server 数据库的项目 1. 新建 ...

  9. Swift: Swift中Selector的变化

    Swift中Selector变化 2.2 之前,使用字符串作为方法名称 //无参数 btn.addTarget(self, action: Selector("buttonPress&quo ...

  10. CentOS6.4下安装Chrome

    因为蛋疼的glibc问题,(我就纳闷了,为何CentOS支持的glibc的版本就那么低呢,害得我至今还没把genymotion安装上), Chrome浏览器一直没安装上,不过终于找到了解决方案,安装派 ...