zoukankan      html  css  js  c++  java
  • ES index not_analyzed

    在最初创建索引mapping时,未指定index:not_analyzed

    "exact_value": {
    	"type":  "string"
     }	
    

    这样导致的后果就是 exect_value字段不能使用es的terms语法来做匹配整个字段的查询,原因是terms要求分词器不要对字段分词,否则无法使用该语法

    如果想要一个字符串像数字一样能被全词匹配(类似与sql中的等于),则需要在创建字段时指定一下,如
    "exact_value": {
    "type": "string",
    "index": "not_analyzed"
    }

    如果问题已经存在,则会是让人挣扎的事情。
    修改es文档字段的定义代价远比新增一个字段大得多,甚至需要将数据库重新同步到es中,中间还需要一个临时索引来过渡

    • 可以考虑在es中新增一个字段来做这件事。代价也比较大,时间长了,大家可能都会忘记加新字段的原因
    • 退而求其次,根据业务判断,是否可以放弃terms查询,改为 matchPhrase 语法来精确查询包含所有关键字的文档。当然,这存在前提:业务模型中,该字段不能存在包含当前数据的文档
      如 exact_value: 你好 ;如果另一个文档的exact_value:你好 xx;则这两个文档都会被匹配出来,如果exact_value的值是一个不含停词的字段且全是字母,则不会被分词器分为多个单词,基本可以使用matchPhrase代替terms查询。
  • 相关阅读:
    洛谷 P2260 [清华集训2012]模积和 || bzoj2956
    Mass Change Queries Codeforces
    Single-use Stones Codeforces
    洛谷 P4503 [CTSC2014]企鹅QQ
    洛谷 P1463 [HAOI2007]反素数
    Bear and Tower of Cubes Codeforces
    洛谷 P1593 因子和 || Sumdiv POJ
    记一次服务器inodes数报警的事件
    MySQL参数详解
    Django基础流程
  • 原文地址:https://www.cnblogs.com/windliu/p/10062589.html
Copyright © 2011-2022 走看看