衷心感谢改版期间大家给予的帮助和体谅

微信登录

微信登录

因恶意注册过多,目前只支持微信模式
正在播放:结合官方教程一起搞定 Elasticsearch 核心基础
发布于: 2019.07.26
张三丰 2019.08.05 01:35

ik中文分词插件安装了,docker容器重启了,但是系统还是把中文分为每一个中文汉字了, 根据百度搜索,修改默认分词器的代码:

PUT /users { "settings" : { "index" : { "analysis.analyzer.default.type": "ik_max_word" } } } 执行结果: { "error": { "root_cause": [ { "type": "resource_already_exists_exception", "reason": "index [users/lsmbG-YgQh2uXZL9Lwnbvw] already exists", "index_uuid": "lsmbG-YgQh2uXZL9Lwnbvw", "index": "users" } ], "type": "resource_already_exists_exception", "reason": "index [users/lsmbG-YgQh2uXZL9Lwnbvw] already exists", "index_uuid": "lsmbG-YgQh2uXZL9Lwnbvw", "index": "users" }, "status": 400 }

================ 该怎么解决这个问题呢?

张三丰 2019.08.05 01:39

ik 的github提供的设置方式: POST /users/_mapping {

    "properties": {

        "user_name": {

            "type": "text",

            "analyzer": "ik_max_word",

            "search_analyzer": "ik_smart"

        }

    }

}

执行结果依然报错: { "error": { "root_cause": [ { "type": "illegal_argument_exception", "reason": "Mapper for [user_name] conflicts with existing mapping:\n[mapper [user_name] has different [analyzer]]" } ], "type": "illegal_argument_exception", "reason": "Mapper for [user_name] conflicts with existing mapping:\n[mapper [user_name] has different [analyzer]]" }, "status": 400 }

===============

我应该如何设置,使用ik分词器替代默认的分词器呢?

张三丰 2019.08.05 02:00

发现设置分词解析器的时候,必须在添加数据之前,如果索引已经有数据,设置会失败。 那么请问,针对已有数据的索引(例如:article),一开始使用的是默认分词器,现在想替换为Ik分词器有什么办法吗?

codinget 2019.08.05 07:17

这个肯定要先添加分词器啊,因为提交数据就是交给es建索引的过程,建索引首先要分词,不使用中分的话他就会使用默认的分词器。对于已经有的索引,批量删了重新索引就行了,视频里介绍批量处理的方法了

张三丰 2019.08.06 01:04

IK中文分词插件,针对中文 词组 解析的比较好,但是如果查询单个汉字,是查询不到数据的。 我看了官方的issue,说是单个中文字,如果要创建索引,后台的负担会非常重,默认不支持单个字查询。 不知道有没有其他解决办法? 是否使用了ik中文分词插件,就无法查询单个中文字了呢?

codinget 2019.08.06 06:21

你前边自己都把答案回复的很完美了,分词的意义就在于此,如果允许所有单字都建索引那就压根不需要分词了,也不是完全不能单字。不要纠结这个东西,分词的时候分词器是根据词典分的,词典也分种类,有的规模小,有的规模大,大部分项目都是选择规模小的,为的就是少建点儿索引,让搜索系统效率更高,节省计算资源,没必要太把搜索当回事,大部分项目中,它就起个辅助作用,不是主角

张三丰 2019.08.07 12:54

悲剧了,请允许我再提一个问题 1.我创建了索引,设置了location的type为 geo_point, (这个geo_point 可以随意定义?还是有什么依据和要求?我没搞明白这个相当于外键的类型,从哪里来的?) 2.我填充数据 demo数据 { "name":"儿童" , "tag":"家人", "remark":"带有外键的数据测试" , "location":{ "lat":100.123502, "lot":214.023145 } }

3.报错了: { "index" : { "_index" : "tb_mobile_asset", "_type" : "_doc", "_id" : "nEfUZ2wBrsE94XreyXgQ", "status" : 400, "error" : { "type" : "mapper_parsing_exception", "reason" : "failed to parse field [location] of type [geo_point]", "caused_by" : { "type" : "parse_exception", "reason" : "field must be either [lat], [lon] or [geohash]" } } } },

codinget 2019.08.07 09:27

低级错误了,看来晚上熬夜精力确实容易眼花,原因提示的很清楚 "reason" : "field must be either [lat], [lon] or [geohash]" ,你的demo数据不对 “lot”肯定是不行的,得符合字段要求才行

爱laravel 2019.08.13 10:58

laravel分布式存储,像fastdfs的解决方案来一期视频

yang 2019.12.21 05:28

老哥 你那个 多刷新 几次 就进入 下雪那个页面了, 是 nginx 限流么, 还是 代码层面的, 在 laravel 中间件种 进行限制吗

codinget 2019.12.21 06:13

代码限制,laravel文档中有这个东西

标 题
找一条适合自己的路,坚持走下去
编程原力 京ICP备17045322号-2
版权所有, 侵权者追究法律责任