Elasticsearch简单学习7:深入了解1

一、Term的查询和全文搜索

1.Term查询

《1.》在ES中,Term查询,对输入不做分词。会将输入作为一个整体,在倒排索引中查找准确的词项,并且使用相关度算分公式为每个包含该词项的文档进行相关度算分。例如:“Apple Store”

《2.》可以通过Constant Score将查询转换成一个Filtering,避免算分,并利用缓存,提供性能。


#批量插入几条上抛相关的数据
POST /products/_bulk
{ "index": { "_id": 1 }}
{ "productID" : "XHDK-A-1293-#fJ3","desc":"iPhone" }
{ "index": { "_id": 2 }}
{ "productID" : "KDKE-B-9947-#kL5","desc":"iPad" }
{ "index": { "_id": 3 }}
{ "productID" : "JODL-X-1937-#pV7","desc":"MBP" }

#查询一下索引的相关信息
GET /products

GET /products/_settings
GET /products/_mapping

#iPhone查询不到! iphone可以查询到?!
#
POST /products/_search
{
  "query": {
    "term": {
      "desc": {
        "value": "iPhone"  //查询不到!
        //"value":"iphone"
      }
    }
  }
}

查询不到的原因是:查询iPhone会自动利用standard进行分词,分词后,是用小写的“iphone”去查询。


POST /_analyze 
{
  "analyzer": "standard",
  "text":"iPhone"
}

但是,如果我们用keyword进行查询,iPhone可以查询到,iphone不可以查询到!

因为desc被分词了(默认分词器还会转小写)。如果要做精确匹配,需要要看keyword类型的字段。

#iPhone可以查询到,iphone不可以查询到
POST /products/_search
{
  "query": {
    "term": {
      "desc.keyword": {
        //"value": "iPhone" //可以查到
        "value":"iphone"
      }
    }
  }
}

 如果字段设置了keyword,你用term查询,就会精确匹配。例如说keyword字段,索引时是“Iphone”,你的term查询必须是Iphone,输入“iphone”就无法匹配。而如果你的字段是“text”类型。你index时候,如果是“Iphone”,在term查询时,“iphone”可以匹配。但是,“Iphone”不会。很多刚接触的同学会有点困惑。背后的原因是,text类型的数据会分词,默认分词器会将输入一个个单词切开,并且转小写了。所以你 term查询时,必须用“iphone”。

举个例子:


#查询不到
POST /products/_search
{
  "query": {
    "term": {
      "productID": {
        "value": "XHDK-A-1293-#fJ3"
      }
    }
  }
}

#可以查询到,注意有score得分!!!!!
#多字段属性keyword的利用
POST /products/_search
{
  //"explain": true,
  "query": {
    "term": {
      "productID.keyword": {
        "value": "XHDK-A-1293-#fJ3"
      }
    }
  }
}

#分词分析
POST /_analyze 
{
  "analyzer": "standard",
  "text":"XHDK-A-1293-#fJ3"
}

2.Constant Score转为Filter

《1.》将Query转为Filter,忽略TF-IDF计算,避免相关性算分的开销

《2.》Filter可以有效利用缓存

#_score都是1.0分
POST /products/_search
{
  "explain": true,
  "query": {
    "constant_score": {
      "filter": {
        "term": {
          "productID.keyword": "XHDK-A-1293-#fJ3"
        }
      }

    }
  }
}

3.全文检索

99a4fa0e17c647283e48aff2cd1d6632085.jpg

《1.》Match Query Result

7e8bfe50cbf85c3ead922615ba143ce6e21.jpg

《2.》Operator

c5eb6ae80efe9b78372013de2338b8df1a8.jpg

《3.》Minimum_should_match

855c9ccab0630f8fc379a47f8c80cebee29.jpg

《4.》Match Phrase Query

dc3710dbbf0916d1221d18f297fdbcd3485.jpg

过程:

f4b2601ca501a56c85442ecd40e51348acb.jpg

转载于:https://my.oschina.net/hanchao/blog/3094120

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值