文档章节

ubuntu 下 使用 elasticsearch5 同义词

oldfeel
 oldfeel
发布于 2017/03/18 07:17
字数 728
阅读 33
收藏 0

1. 安装最新版 elasticsearch

参考: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/deb.html

依次执行以下命令

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
sudo apt-get update && sudo apt-get install elasticsearch

查看自己系统用的是 SysV 还是 systemd

ps -p 1

我用的是 systemd 执行

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service

2.  启动 elasticsearch

sudo service elasticsearch start

3. 检查是否安装成功

curl -XGET 'localhost:9200/?pretty'

如果返回结果类似以下内容,说明安装成功

{
  "name" : "Cp8oag6",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
  "version" : {
    "number" : "5.2.2",
    "build_hash" : "f27399d",
    "build_date" : "2016-03-30T09:51:41.449Z",
    "build_snapshot" : false,
    "lucene_version" : "6.4.1"
  },
  "tagline" : "You Know, for Search"
}

4. 配置同义词

elasticsearch5 的默认目录是 /etc/elasticsearch,所以在 /etc/elasticsearch 目录下创建同义词文件

edit /etc/elasticsearch/analysis/synonyms.txt

输入同义词(每行一组),注意文件必须要是 utf-8 格式,英文逗号

中文,汉语,汉字,
2室1厅1卫,2室2厅1卫=>二居室,
1室1厅1卫=>一居室,一室
3室2厅1卫,三居室,

其中包含 => 的同义词是在 analysis 时只生成 => 后面的词,应该比较省内存,不知道缺点是什么.

5. 安装分词插件

elasticsearch 默认是没有汉语词组的,所以要用这个插件

https://github.com/medcl/elasticsearch-analysis-ik/releases

下载和 elasticsearch 匹配的版本,解压缩到 elasticsearch 的 plugins 目录下的 ik 文件夹中,比如我的是 /usr/share/elasticsearch/plugins/ik

6. 配置自定义词组

我们用到的词语有些是 ik 中已有的,比如 中文/汉语/汉字,有些是没有的,比如 一居室/二居室,没有的就要自己配置了

gedit /usr/share/elasticsearch/plugins/ik/config/custom/mydict.dic

添加自定义词组到文件中

2室1厅1卫
2室2厅1卫
二居室
1室1厅1卫
一居室
3室2厅1卫
三居室

安装/修改插件,需要重启 elasticsearch 才会生效

sudo service elasticsearch stop
sudo service elasticsearch start 

7. 检测自定义分词是否有效

curl -XGET 'http://localhost:9200/gj/_analyze?pretty&analyzer=by_smart' -d '{"text":"一居室"}

8. 创建 index

准备工作已经做好了,现在可以在代码中使用同义词了,这里用 php 演示一下

        $client = ClientBuilder::create()->build();

        // 创建 index
        $settings = json_decode('{
            "analysis": {
                "analyzer": {
                    "by_smart": {
                        "type": "custom",
                        "tokenizer": "ik_smart",
                        "filter": [
                            "by_tfr",
                            "by_sfr"
                        ],
                        "char_filter": [
                            "by_cfr"
                        ]
                    },
                    "by_max_word": {
                        "type": "custom",
                        "tokenizer": "ik_max_word",
                        "filter": [
                            "by_tfr",
                            "by_sfr"
                        ],
                        "char_filter": [
                            "by_cfr"
                        ]
                      }
                    },
                    "filter": {
                        "by_tfr": {
                            "type": "stop",
                            "stopwords": [
                                " "
                            ]
                        },
                        "by_sfr": {
                            "type": "synonym",
                            "synonyms_path": "analysis/synonyms.txt"
                        }
                    },
                    "char_filter": {
                        "by_cfr": {
                            "type": "mapping",
                            "mappings": [
                                "| => |"
                            ]
                        }
                    }
                }
            }');

        $mappings = json_decode('{
            "_default_":{
              "properties": {
                  "shoujia": {
                    "type":"double"
                  }
              }
            },
            "xinfang":{
              "_source":{
                "enabled":true
              },
              "properties":{
                  "huxing": {
                      "type": "text",
                      "index": "analyzed",
                      "analyzer": "by_max_word",
                      "search_analyzer": "by_smart"
                  }
              }
            }
        }');

        $params = [
          'index'=>'gj',
          'body'=>[
            'settings'=>$settings,
            'mappings'=>$mappings
          ]
        ];
        $client->indices()->create($params);

8. 名词解释

只用了几天 elasticsearch,懂的地方不多,所以这些只是片面的理解.

_index 类似数据库中的 schema 名字

_type 类似数据表

properties 表中的字段

mappings 配置字段的分词规则(比如我们的ik分词),类型(integer,double,string,text等等)

analysis 分词的规则

 

© 著作权归作者所有

共有 人打赏支持
oldfeel
粉丝 45
博文 78
码字总数 17297
作品 0
防城港
个人站长
私信 提问
ElasticSearch更新同义词表

缘起 ElasticSearch是一个基于Lucene的搜索服务器,能够高效地进行查询操作。同义词表是ES中的一个辅助工具,可以增加查询操作的灵活性和实用性。在项目开发中,有时会需要更新同义词表,以提...

郗南枫
2017/07/28
0
0
robbe-1.1发布 - 高性能php中文分词扩展

robbe是建立在friso上的一款高性能中文分词组件, 分词准确率达98.4%, 简易模式分词速度: 3.1M/sec, 复杂模式: 1.4M/sec (Ubuntu/2G/双核的一般般的CPU) friso-1.1来了: 1. 修复了一个可能会导...

狮子的魂
2013/06/16
1K
27
Oracle 中的 同义词(synonym)

(一)同义词的概念 同义词是数据库中表、视图、序列、过程、函数、程序包、物化视图、Java类模式对象、用户定义对象类型,或另一个同义词的别名。与视图相似,同义词不占用实际的存储空间,在...

圣洁之子
2018/07/12
0
0
Nginx + Naxsi + Nxapi + ElasticSearch + Kibana 安装

Author: Xu FC Platform: CentOS 7 -- Linux localhost.localdomain 3.10.0-693.21.1.el7.x8664 #1 SMP Wed Mar 7 19:03:37 UTC 2018 x8664 x8664 x86_64 GNU/Linux 安装依赖 安装 libssl: ......

捞小虾
2018/05/07
0
0
Oracle 同义词创建及其作用

在Oracle中对用户的管理是使用权限的方式来管理的,也就是说,如果我们想使用数据库,我们就必须得有权限,但是如果是别人将权限授予了我们,我们也是能对数据库进行操作的,但是我们必须要已...

鉴客
2011/07/12
267
0

没有更多内容

加载失败,请刷新页面

加载更多

Android Messenger进程间客户端向服务端传递数据

Messenger:客户端向服务端传递数据 1.Service: public class MessengerService extends Service { private Messenger messenger = new Messenger(new Handler() { public void handleMess......

Coding缘
14分钟前
0
0
Pod在多可用区worker节点上的高可用部署

一、 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可用...

zhaowei121
33分钟前
2
0
oracle XTTS介绍

一、什么是XTTS 首先什么是XTTS。XTTS其实是从TTS来的,TTS其实也是传输数据的一种手段,传输数据的时候可能用过EXP的方式,再往后可能用数据泵导入导出一些数据,或者去做备份然后再恢复。其...

突突突酱
33分钟前
0
0
[缺陷分析]半同步下多从库复制异常

引 言 本文是由爱可生研发团队出品的「图解MySQL」系列文章,不定期更新,但篇篇精品。 爱可生开源社区持续运营维护的小目标: 每周至少推送一篇高质量技术文章 每月研发团队发布开源组件新版...

爱可生
33分钟前
0
0
二维数组序号重置

public static function unique_arr($array2D,$stkeep=false,$ndformat=true){ // 判断是否保留一级数组键 (一级数组键可以为非数字) if($stkeep) $stArr = array_keys($array2D); // 判断是......

dragon_tech
36分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部