• Elasticsearch学习之SearchRequestBuilder的query类型


    1. 分词的时机

      对于ES来讲,可以对文档的内容进行分词(前提是设置了analyzed),也可以对输入的搜索词进行分词。对输入的搜索词进行分词时需要看下使用的什么类型的query。不同的query可能会对词进行分词,也可能不分词。无论是文档分词还是搜索词分词,依赖于使用的是什么分词器。分词的结果和分词规则(假设使用的是默认的standard),去掉大部分标点符号,并以此分割原词为多个词,把分分割后的词转为小写(汉字的话分完的结果)放入token组中,对于not-analyzed的词,直接把原词放入token组中。如下所示:

    http://192.168.1.114:9200/_analyze?pretty&analyzer=standard&text=销售管理,结果:

    {  
        tokens: [  
            {  
                token: "",  
                start_offset: 0,  
                end_offset: 1,  
                type: "<IDEOGRAPHIC>",  
                position: 0  
            },  
            {  
                token: "",  
                start_offset: 1,  
                end_offset: 2,  
                type: "<IDEOGRAPHIC>",  
                position: 1  
            },  
            {  
                token: "",  
                start_offset: 2,  
                end_offset: 3,  
                type: "<IDEOGRAPHIC>",  
                position: 2  
            },  
            {  
                token: "",  
                start_offset: 3,  
                end_offset: 4,  
                type: "<IDEOGRAPHIC>",  
                position: 3  
            }  
        ]  
    }  

    如果进行搜索的时候会使用倒排索引的方式进行查找。
    使用不同类型的query进行搜索
    1. termQuery的机制是:直接去匹配token,如上面的分词结果如果是
      termQuery(销售)//无结果,token数组不存在
      termQuery(销)//  有结果,token数组中存在
      termQuery(售)//  有结果,token数组中存在
    2. matchQuery的机制是:先检查搜索的字段类型是否是analyzed,如果是,则先使用分词器分词,再去去匹配token;如果查询的字段没有被分词,则直接去匹配token。
      matchQuery(销售)
      2.1 如果查询的'销售' 字段在建索引的时候没有指定not_analyzed,那么会先进行分词在查询。会分为'销'和'售',然后依次进行查询。
      2.2 如果指定了not_analyzed,那么将直接使用'销售'进行查询。

  • 相关阅读:
    safeNet
    网店
    微信公众号自定义菜单与回车
    西游记对教育的启发
    zencart资源
    cmd批处理常用符号详解
    div垂直居中
    git工作量统计
    VS2012变化的快捷键:
    sql 树 递归
  • 原文地址:https://www.cnblogs.com/sunfie/p/9030372.html
Copyright © 2020-2023  润新知