elasticsearch 及分词使用

一,索引管理

1,创建索引

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

$param = [

             "index"=>‘my_index‘

 ];

$response = $client->indices()->create($param);

你也可以再一个创建索引api中指定任何参数。所有得参数通常会注入请求体中得body参数下:

$hosts = [
    ‘192.168.1.1:9200‘,         // IP + Port
    ‘192.168.1.2‘,              // Just IP
    ‘mydomain.server.com:9201‘, // Domain + Port
    ‘mydomain2.server.com‘,     // Just Domain
    ‘https://localhost‘,        // SSL to localhost
    ‘https://192.168.1.3:9200‘  // SSL to IP + Port
];

$client = ClientBuilder::create()

->setHost($host)// 指定主机域名

->setRetries(2)  // 设置重连次数

->build();

$params = [

"index"=>‘my_index‘,

"body"=>[

"settings"=>[

"number_of_shards"=>3,

"number_of_replicas"=>2

],

"mappings"=>[

"my_type"=>[

"_source"=>[

"enabled"=>true

],

"properties"=>[

"first_name"=>[

"type"=>"string"

"analyzer"=>"standard"

] ,

"age"=>[

"type"=>"integer"

]

]

]

]

]

];

$response = $client->indices()->create($params);

2,删除一个索引

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

$params = [‘index‘=>‘my_index‘];

$response = $client->indice()->delete($params);

3,Put Settings APi

Put Setting APi允许你更改索引的配置参数

$params = [

"index"=>‘my_index‘,

"body"=>[

"settings"=>[

"number_of_replicas"=>0,

"refresh_interval"=>-1

]

]

];

$response = $client->indices()->putSettings($params);

Get Settings APi

Get Settings API可以让你知道一个或多个索引的当前配置参数:

$params = ["index"=>"my_index"];

$response = $client->indices()->getSettings($params);

$params = [

"index"=>["my_index","my_index2"]

];

Put Mappings Api

Put Mappings Api允许你更改或增加一个索引的映射。

$param = [    "index"=>"my_index",    "type"=>"my_type2",    "body"=>[        "my_type2"=>[            "_source"=>[                "enabled"=>true            ],            "properties"=>[                "first_name"=>[                    "type"=>‘string‘,                    "analyzer"=>"standard"                ],                "age"=>[                    "type"=>"integer"                ]            ]        ]    ]];
$client->indices()->putMapping($param);//Put Mappings API允许增加或增加一个索引的映射

Get Mappings API 返回索引和类型的映射细节。你可以指定一些索引和类型,取决于你希望索引什么映射。
$response = $client->indices()->getMapping();//获取所有映射

$params = ["index"=>"my_index"];$response = $client->indices()->getMapping($params);//获取指定索引的映射

$params = [    "index"=>‘my_index‘,    "type"=>"my_type"];$response = $client->indices()->getMapping($params);//获取指定索引指定type下的映射$params = [    "index"=>["my_index",‘my_index2‘]];$response = $client->indices()->getMapping($params);//获取多个索引的映射
二,索引文档1,单一文档当索引一个文档时,你可以提供一个ID或者让Elasticsearch自动生成提供ID值:
$params = [    "index"=>‘my_index‘,    "type"=>‘my_type‘,    "id"=>‘my_id‘,    "body"=>["testField"=>‘abc‘]];$response = $client->index($params);不提供ID值
$params = [    "index"=>‘my_index‘,    "type"=>"my_type",    "body"=>[‘testField‘=>[‘abc‘]]];$response = $client->index($params);如果你需要设置其他的参数,如routing的值,你可以指定这些参数到index,type等参数后。例如,索引一个新的文档时设置rounting值和timestamp值:
//如果需要蛇者其他的参数,需要指定到index,type之后$params = [    "index"=>"my_index",    "type"=>"my_type",    "id"=>"my_id",    "routing"=>"company_xyz",    "timestamp"=>strtotime("-1d"),    "body"=>[        "testField"=>"abd"    ]];$response = $client->index($params);2,批量(bulk)索引Elasticsearch也支持批量(bulk)索引对象。bulk API要求提供JSON格式的  action/元数据  键值对。再php中构建批量文档数据也是相似的。你首先要创建一个action数组对象(如index对象),然后你还要创建一个body对象。而PHP程序则重复上述操作构建文档数据。例子:
for($i=0; $i<10; $i++){    $params[‘body‘][] = [        "index"=>[            "_index"=>"my_index",            "_type"=>"my_type"        ]    ];    $params[‘body‘][] = [        "my_field"=>"my_value",        "second_field"=>"some more values"    ];}$response = $client->bulk($params);//批量发送
实际上再一次bulk请求中发送数量会比文档实际数量少。如果时这种情况,你就要设置批量值然后周期性的发送:
//周期性的发送$params = ["body"=>[]];for($i=1;$i=123456;$i++){    $params[‘body‘][] = [        "index"=>[            "_index"=>"my_index",            "_type"=>"my_type",            "_id"=>$i        ]    ];    $params[‘body‘][] = [        "my_field"=>"my_value",        "second_field"=>"some more values"    ];    if($i % 1000 ==0){        $response = $client->bulk($params);        $params = ["body"=>[]];        unset($response);    }}if(!empty($params[‘body‘])){    $response = $client->bulk($params);}三,php处理JSON数组或对象Elasticsearch JSON API 常见的数据格式1,空对象Elasticseach API再几个地方使用了空对象,这会对PHP造成影响。不像其他的语言,PHP没有一个简便的符号来表示空对象,而许多开发者还不知道如何指定一个空对象
{
    "query" : {
        "match" : {
            "content" : "quick brown fox"
        }
    },
    "highlight" : {
        "fields" : {
            "content" : {}
        }
    }
}
这个空对象便会引起问题问题就在于php会自动把 "conteng":{} 转换为"content":[] ,在Elasticsearch DSL中这样的数据格式时非法的。我们需要告诉PHP那个空对象就是一个空对象而非空数据。为了在查询中定义空对象,需要这样做:
//定义空对象$params[‘body‘] = array(    "query"=>[        "match"=>[            "content"=>"quick brown fox"        ]    ],    "highlight"=>array(        "fields"=>[            "content"=>new \stdClass() // 定义空对象        ]    ));$response = $client->search($params);
通过使用PHP的stdclass对象来代表空对象,现在就可以解析JSON数据了

通过使用一个stdclass对象,我们可以强制json_encode解析为空对象,而不是空数组。然而,这种冗余的写法是唯一解决PHP空对象的方法

2,对象数组Elasticsearch DSL的另一种常见的数据格式时对象数组。例如假设在你的查询中增加排序
{
    "query" : {
        "match" : { "content" : "quick brown fox" }
    },
    "sort" : [
        {"time" : {"order" : "desc"}},
        {"popularity" : {"order" : "desc"}}
    ]
}sort内含JSON对象数组嵌套数组
//对象数组$params[‘body‘] = [    "query"=>[        "match"=>[            "content"=>"quick brown fox"        ]    ],    "sort"=>[ // 这里encode 为 "sort":[]        [‘time‘=>[‘order‘=>"desc"]], //这里encode为:{"time":{"order":"desc"}}        ["popularity"=>["order"=>"desc"]] //这里encode为 {"popularity":{"order":"desc"}}
    ]];$response = $client->search($params);3,空对象数组偶尔DSL需要上述两种数据格式。score查询便是一个很好的例子,该查询有时需要一个对象数组,而有一些对象数组,而有一些对象可能时一个空的JSON对象请看如下查询
{
   "query":{
      "function_score":{
         "functions":[
            {
               "random_score":{}
            }
         ],
         "boost_mode":"replace"
      }
   }
}

我们用下面的PHP代码来构建这个查询

//空对象数组$params[‘body‘] = [    "query"=>[        "function_score"=>[            "functions"=>[//encode为"functions""[]                [//encode为{"random_score":{}}                    "random_score"=>new \stdClass()//encode为"random_score":{}                ]            ]        ]    ]];$result = $client->search($params);
四 搜索操作1,Match查询以下时Match查询的标准curl格式
curl -XGET ‘localhost:9200/my_index/my_type/_search‘ -d ‘{
    "query" : {
        "match" : {
            "testField" : "abc"
        }
    }
}‘

而这里则时客户端构建的同样的查询
//搜索操作$params = [    "index"=>"my_index",    "type"=>"my_type",    "body"=>[        "query"=>[            "match"=>[                "testField"=>"abc"            ]        ]    ]];$result = $client->search($params);

这里要注意PHP数组得结构与层次是怎样与curl中得JSON请求体格式相对应得。这种方式使得JSON得写法转换为PHP得写法变得十分简单。一个快速检测PHP数组是否为预期结果得方法,就是encode为JSON格式,然后进行检查:
$params = [    "index"=>"my_index",    "type"=>"my_type",    "body"=>[        "query"=>[            "match"=>[                "testField"=>‘abc‘            ]        ]    ]];print_r(json_encode($params[‘body‘]));{"query":{"match":{"testField":"abc"}}}
使用原生JSON有时使用原生JSON来进行测试会十分方便,或者原生JSON来进行不同系统的移植也同样方便。你可以在body中用原生JSON字符串,这样客户端会自动进行检查操作: 
$json = ‘{     "query":{          "match":{                "testField":"abc"          }     }}‘;$params = [    "index"=>"my_index",    "type"=>"my_type",    "body"=>$json];$results = $client->search($params);搜索结果与Elasticsearch的响应结果一致,唯一不同的是JSON格式会转换成PHP数组。处理这些数据与数组迭代一样简单:
$params = [    "index"=>"my_index",    "type"=>"my_type",    "body"=>[        "query"=>[            "match"=>[                "testField"=>‘abc‘            ]        ]    ]];$results = $client->search($params);$milliseconds = $results[‘took‘];$maxscore = $results[‘hits‘][‘max_score‘];$score = $results[‘hits‘][‘hits‘][0][‘_score‘];$doc = $results[‘hits‘][‘hits‘][0][‘_source‘];
Bool查询利用客户端可以轻松构建Bool查询。例如以下查询
curl -XGET ‘localhost:9200/my_index/my_type/_search‘ -d ‘{
    "query" : {
        "bool" : {
            "must": [
                {
                    "match" : { "testField" : "abc" }
                },
                {
                    "match" : { "testField2" : "xyz" }
                }
            ]
        }
    }
}‘   会构建为这样了
$params = [    "index"=>"my_index",    "type"=>"my_type",    "body"=>[        "query"=>[            "bool"=>[                "must"=>[                    ["match"=>["testField"=>"abc"]],                ]            ]        ]    ]];$results = $client->search($params);

这里注意must语句接收的是数组。这里会转化为JSON数组,所以最后的响应结果与curl格式的响应结果一致。。更为复杂的示例这里构建一个有点复杂的例子:一个bool查询包含一个filter过滤器和一个普通查询。这在elasticsearch的查询中非常普通,所以这个例子会非常有用。curl格式的查询:
curl -XGET ‘localhost:9200/my_index/my_type/_search‘ -d ‘{
    "query" : {
        "bool" : {
            "filter" : {
                "term" : { "my_field" : "abc" }
            },
            "should" : {
                "match" : { "my_other_field" : "xyz" }
            }
        }
    }
}‘而在PHP中Scrolling(游标)查询在用bulk时,经常要用scrolling功能对文档进行分页处理,如输出一个用户的所有文档。这比常规的搜索要高效,因为这里不需要对文档执行性能消耗较大的排序操作。Scrolling会保留某个时间的索引快照数据,然后快照数据,然后用快照数据进行分页。游标查询窗口允许持续分页操作,即使后台正在执行索引文档、更新文档和删除文档。首先,你要在发送搜索请求时增加scroll参数。然后就会返回一个文档页数信息,还有一个用来获取hits分页数据的scroll_id。以下代码更为深入的操作的示例:
$params = [    "scroll"=>"30s",//滚动请求的间隔时间    "size"=>50,//每个碎片返回多少个结果    "index"=>"my_index",    "body"=>[        "query"=>[            "match_all"=>new \stdClass()        ]    ]];$response = $client->search($params);//循环,直到滚动游标用完为止while(isset($response[‘hits‘][‘hits‘]) && count($response[‘hits‘][‘hits‘])>0 ){    $scroll_id = $response[‘_scroll_id‘];//刷新scroll_id    $response = $client->scroll([//执行滚动请求并重复        "scroll_id"=>$scroll_id,        "scroll"=>"30s"    ]);}
5,获取文档Elasticsearch提供实时获取文档的方法。这意味着只要文档被索引且客户端收到消息确认后,你就可以立即在任何的分片中检索文档。Get操作通过index/type/id方式方式请求一个文档信息:
$params = [    "index"=>‘my_index‘,    "type"=>"my_type",    "id"=>"my_id"];$response = $client->get($params);6,更新文档更新文档操作既可以完全覆盖现存文档全部字段,又可以部分更新字段(更改现存字段,或添加新字段)部分更新如果你要部分更新文档(如更改现存字段,或添加新字段),你可以在body参数中指定一个doc参数。这样doc参数内的字段会与现存字段进行合并
$params = [    "index"=>"my_index",    "type"=>"my_type",    "id"=>"my_id",    "body"=>[        "doc"=>[            "new_field"=>"abc"        ]    ]];//更新 /my_index/my_type/my_id 索引文档$response = $client->update($params);
Script更新

有时你要执行一个脚本来进行更新操作,如字段进行自增操作或添加新字段。为了执行一个脚本更新,你要提供脚本命令和一些参数
$params = [    "index"=>"my_index",    "type"=>"my_type",    "id"=>"my_id",    "body"=>[        "script"=>"ctx._source.counter += count",        "params"=>[            "count"=>4        ]    ]];$response = $client->update($params);

Upserts更新Upserts操作是指“更新或插入”操作会执行script更新,如果文档不存在(或是你更新的字段不存在),则会插入一个默认值
$params=[    "index"=>"my_index",    "type"=>"my_type",    "id"=>"my_id",    "body"=>[        "script"=>"ct._source.counter += count",        "params"=>[            "count"=>4        ],        ‘upsert‘=>[            "counter"=>1        ]    ]];$response = $client->update($params);
六,命名空间客户端有许多“命名空间”,通常是一些公开的可管理功能。命名空间对应Elasticsearch中各种可管理的endpoint。下面全部的命名空间:
命名空间 功能
indices() 索引数据和显示索引信息
nodes() 节点数据统计和显示节点信息
cluster 集群数据统计和显示集群信息
snapshort 对集群和索引进行拍摄快照或恢复数据
cart() 执行Cat API命令(通常在命令行中使用)
一些方法在不同的命名空间下均可使用。虽然返回的是同样的信息但是却属于不同的上下文环境。想知道命名空间如何运行,请看_stats的输出信息
$response = $client->indices()->stats();$response = $client->nodes()->stats();$response = $client->cluster()->stats();
上面展示了在三个不同命名空间下都调用了stats()方法,有时这些方法需要参数,这些参数的写法跟客户端中其他方法的参数写法相同。例如我们可以请求索引或多个索引的统计信息:
$params_1[‘index‘] = "my_index";$response = $client->indices()->stats($params_1);
$params_2[‘index‘] = ["my_index",‘my_index2‘];$response = $client->indices()->stats($params_2);
/在现有索引中添加别名$params_3[‘body‘] = [    "actions"=>[        [            "add"=>[                "index"=>"my_index",                "alias"=>"myalias"            ]        ]    ]];$response = $client->indices()->updateAliases($params_3);
注意上述例子中两个stats的调用和updateAlias的调用接收不同格式的参数,每个方法的参数格式由响应的API需求来决定。stats API只需要一个index名,而updateAlias则需要一个body,里面还要一个actions参数。

七 按请求配置1,忽略异常  Elasticsearch-PHP的类库是会对普通的问题抛出异常的。这些异常跟Elasticsearch返回的HTTP响应码--对应。例如,获取一个不存在的文档抛出MissingDocument404Exception.  异常对于处理一些问题(如找不到文档,语法错误,版本冲突等)十分有用。但是有时候你只是想要处理返回的数据  如果你想忽略异常,你可以配置ignore参数。ignore参数要作为client的参数配置在请求体中。例如下面的实例会忽略MissingDocument404Exception,返回的是Elasticsearch提供的JSON数据
$params = [    "index"=>"test_missing",    "type"=>"test",    "id"=>1,    "client"=>[‘ignore‘=>404]//忽略参数ignore需要作为client的参数配置在请求体中 这里忽略404];$client->get($params);
你可以通过数组的方式指定忽略多个HTTP状态码:
//忽略多个HTTP状态码$params = [    "index"=>"test_missing",    "type"=>"test",    "id"=>1,    "client"=>["ignore"=>[400,404]] //ignore参数接收数组,BadRequest400Exception和MissingDocument404Exception都会忽略];$client->get($params);

注意,返回的数据是字符串格式,而不是JSON数据。而在第一个示例中返回的是JSON数据,客户端会decode该JSON数据为数组。一旦客户端无法得知返回的异常数据格式,客户端就不会decode返回结果

2,自定义查询参数
有时候你要自己提供自定义参数,比如第三方插件或代理提供认证token。在Elasticsearch-php的白名单中存储着所有的查询参数,这是为了防止你指定一个参数,而Elasticsearch却不接受。

如果你要自定义参数,你就要忽略这种白名单机制。为了达到这种效果,请增加custom参数:
$params = [    "index"=>"test",    "type"=>"test",    "id"=>1,    "parent"=>‘abc‘,//列入白名单的参数    "client"=>[        "custom"=>[             "customeToken"=>"abc",//用户定义,没有勾选            "otherToken"=>123        ]    ]];$exists = $client->exists($params);if($exists){    echo "存在";}else{    echo "不存在";}
返回详细输出客户端默认只返回响应体数据。如果你需要更多信息(如头信息,响应状态码等),你可以让客户端返回更多详细信息。通过verbose参数可以开启这个功能。没有返回详细信息,你看到的返回是这样的:
$params = [    "index"=>"test",    "type"=>"test",    "id"=>1,    "client"=>[        "ignore"=>[400,404]    ]];$response = $client->get($params);
如果加上参数:
$params = [    "index"=>"my_index",    "type"=>"my_type",    "id"=>"my_id",    "client"=>[        "verbose"=>true    ]];$response = $client->get($params);5,curl超时设置
通过timeout和connect_timeout参数可以配置每个请求的curl超时时间。这个配置主要是控制客户端的超时之间。connect_time 参数控制在连接阶段完成前,curl的等待时间。而timeout参数则控制整个请求完成前,最多等待多长时间。如果超过超时时间,curl会关闭连接并返回一个致命错误,两个参数都要用 秒 作为参数注意:客户端超时并 不 意味着Elasticsearch中止请求。Elasticsearch会继续执行请求直到请求完成。在慢查询或是bulk请求下,操作会在后台继续执行,对客户端来说这些动作是隐蔽的。如果客户端在超市后立即断开连接,然后又立刻发送另外一个请求。由于客户端没有处理服务端回压的机制,这有可能会造成服务端过载。遇到这种情况,你会发现线程池队列会慢慢变大,当队列超出负荷,Elasticsearch会发送EsRejectedException的异常
//curl超时设置$params = [    "index"=>"my_index",    "type"=>"my_type",    "id"=>"my_id",    "client"=>[        "timeout"=>10,//控制整个请求完成前,最多等待的时间        "connect_time"=>10//控制在连接阶段完成前,curl等待的时间    ]];$response = $client->get($params);
6,开启Future模式客户端支持异步方式批量发送请求。通过client选项的future参数可以开启(HTTP handle要支持异步模式)
//开启future模式$params = [    "index"=>"my_index",    "type"=>"my_type",    "id"=>"my_id",    "client"=>[        "future"=>"lazy"    ]];$future = $client->get($params);$results = $future->wait();//解决函数
future模式有两个参数可选:true或lazy。关于异步执行方法以及如何处理返回结果的详情,请到Future模式中查看

7,SSL加密在创建客户端时,一般需要指定SSL配置,因为通常所有的请求都需要加密。然而,在每个请求中配置SSL加密也是有可能的。例如,如果你需要在某个特定的请求中使用自签名整数,你可以通过在client选项中配置verify参数:
$params = [    "index"=>"my_index",    "type"=>"my_type",    "id"=>"my_id",    "client"=>[        ‘verify‘=>‘path/to/cacert.pem‘//使用自签名证书    ]];$result = $client->get($params);


原文地址:https://www.cnblogs.com/shangfz/p/11502303.html

时间: 2024-10-18 14:47:59

elasticsearch 及分词使用的相关文章

Elasticsearch之分词器的工作流程

前提 什么是倒排索引? Elasticsearch之分词器的作用 Elasticsearch的分词器的一般工作流程: 1.切分关键词 2.去除停用词 3.对于英文单词,把所有字母转为小写(搜索时不区分大小写)

Elasticsearch 中文分词(elasticsearch-analysis-ik) 安装

由于elasticsearch基于lucene,所以天然地就多了许多lucene上的中文分词的支持,比如 IK, Paoding, MMSEG4J等lucene中文分词原理上都能在elasticsearch上使用.当然前提是有elasticsearch的插件. 至于插件怎么开发,这里有一片文章介绍:http://log.medcl.net/item/2011/07/diving-into-elasticsearch-3-custom-analysis-plugin/暂时还没时间看,留在以后仔细研

elasticsearch中文分词(mmseg)——手动添加词典

elasticsearch本身的中文分词插件效果都不理想,手动添加词典可以在一定程度上进行弥补. 经过多次实验发现,mmseg的分词机制采用正向最长匹配算法,例如,针对"小时代"这个单词,其自带的词典中没有包含该词,故当用户搜索小时代时,检索不到任何结果. 在咸鱼老婆的虚心指导下,我终于找到了解决办法. 手动添加该词到mmseg的词库中,有两种方法: 1.将该词加入到自带的某个词典中(非停顿词词典),如words-my.dic. 2.新建一个自定义词典,将其放入默认词库文件夹下,注意编

elasticsearch 拼音+ik分词,spring data elasticsearch 拼音分词

elasticsearch 自定义分词器 安装拼音分词器.ik分词器 拼音分词器: https://github.com/medcl/elasticsearch-analysis-pinyin/releases ik分词器:https://github.com/medcl/elasticsearch-analysis-ik/releases 下载源码需要使用maven打包 下载构建好的压缩包解压后放直接在elasticsearch安装目录下 plugins文件夹下,可以重命名 1.在es中设置分

elasticsearch kibana + 分词器安装详细步骤

elasticsearch kibana + 分词器安装详细步骤 一.准备环境 系统:Centos7 JDK安装包:jdk-8u191-linux-x64.tar.gz ES安装包:elasticsearch-7.2.0-linux-x86_64.tar.gz,下载地址 Kibana安装包:kibana-7.2.0-linux-x86_64.tar.gz,下载地址 IK分词器安装包:elasticsearch-analysis-ik-7.2.0.zip,下载地址 目前准备两个节点做节点规划,分别

ElasticSearch中分词器组件配置详解

首先要明确一点,ElasticSearch是基于Lucene的,它的很多基础性组件,都是由Apache Lucene提供的,而es则提供了更高层次的封装以及分布式方面的增强与扩展. 所以要想熟练的掌握的关于es中分词方面的知识,一定得先从Lucene抓起,否则只会是丈二和尚摸不着头脑,当然我们大多数开发者只关注于怎么用,偏底层的东东,也没有太多时间去深究,这也有情可原,遇到问题再去探究,也何尝不是一种办法,如果有时间,还是建议看看Lucene基础的知识. 在ElasticSearch或Solr中

Elasticsearch 中文分词插件 jcseg 安装 (Ubuntu 14.04 下)

搜索可以说是开发中很常见的场景了,同样这次也一样... 之前的组合多数是选择 Mysql + Sphinx ,这次因为工作原因不再使用这种组合,虽然是老牌组合,但是确实限制诸多,而且每次配环境也是个问题,挺烦的...这次就尝试使用 Elasticsearch + Jcseg ,因为在文档检索方面 elasticsearch 做的相当不错,但是对中文环境来说就差一个很好的中文分词器,还好,国内好的中文分词器也有蛮多,但是我个人还是比较推荐 Jcseg . 好了,废话不多扯. 版本说明: elast

使用 Elasticsearch ik分词实现同义词搜索(转)

1.首先需要安装好Elasticsearch 和elasticsearch-analysis-ik分词器 2.配置ik同义词 Elasticsearch 自带一个名为 synonym 的同义词 filter.为了能让 IK 和 synonym 同时工作,我们需要定义新的 analyzer,用 IK 做 tokenizer,synonym 做 filter.听上去很复杂,实际上要做的只是加一段配置. 打开 /config/elasticsearch.yml 文件,加入以下配置: [html] vi

ElasticSearch中文分词(IK)

ElasticSearch安装 官网:https://www.elastic.co 1.ElasticSearch安装 1.1.下载安装公共密钥 rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 1.2.在 /etc/yum.repos.d/ 目录下建立 elasticsearch.repo 文件 vim /etc/yum.repos.d/elasticsearch.repo 在文件中写入: [elasticsearc

Windows ElasticSearch中文分词配置

elasticsearch官方只提供smartcn这个中文分词插件,效果不是很好,好在国内有medcl大神(国内最早研究es的人之一)写的两个中文分词插件,一个是ik的,一个是mmseg的,下面分别介绍ik的用法, 当我们创建一个index(库db_news)时,easticsearch默认提供的分词器db_news,分词结果会把每个汉字分开,而不是我们想要的根据关键词来分词.例如: 代码如下: 正常情况下,这不是我们想要的结果,比如我们更希望 “我”,“爱”,“北京”,"天安门"这样