本篇文章给大家谈谈Elasticsearch模糊短语,以及elasticsearch模糊查询的知识点,同时本文还将给你拓展docker部署elasticsearch+elasticsearch-hea
本篇文章给大家谈谈Elasticsearch模糊短语,以及elasticsearch模糊查询的知识点,同时本文还将给你拓展docker 部署 elasticsearch + elasticsearch-head + elasticsearch-head 跨域问题 + IK 分词器、Docker部署ElasticSearch和ElasticSearch-Head、Docker部署ElasticSearch和ElasticSearch-Head的实现、Elastic search模糊匹配,精确匹配显示在前等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- Elasticsearch模糊短语(elasticsearch模糊查询)
- docker 部署 elasticsearch + elasticsearch-head + elasticsearch-head 跨域问题 + IK 分词器
- Docker部署ElasticSearch和ElasticSearch-Head
- Docker部署ElasticSearch和ElasticSearch-Head的实现
- Elastic search模糊匹配,精确匹配显示在前
Elasticsearch模糊短语(elasticsearch模糊查询)
我有以下查询,以便在搜索中增加模糊性。但是,我现在意识到,匹配查询不像match_phrase那样考虑搜索字符串中单词的顺序。但是,我无法获得match_phrase给我模糊的结果。有没有办法告诉比赛考虑单词之间的顺序和距离?
{ "query": { "match": { "content": { "query": "some search terms like this", "fuzziness": 1, "operator": "and" } } }}
答案1
小编典典最终发现我需要使用span
查询的组合,从而对模糊性和倾斜度进行了大量的微调。我需要添加一个函数来手动标记我的短语并以编程方式添加到“子句”数组中:
{"query":{ "span_near": { "clauses": [ { "span_multi": { "match": { "fuzzy": { "content": { "fuzziness": "2", "value": "word" } } } } }, { "span_multi": { "match": { "fuzzy": { "content": { "fuzziness": "2", "value": "another" } } } } } ], "slop": 1, "in_order": "true"
docker 部署 elasticsearch + elasticsearch-head + elasticsearch-head 跨域问题 + IK 分词器
0. docker pull 拉取 elasticsearch + elasticsearch-head 镜像
1. 启动 elasticsearch Docker 镜像
docker run -di --name tensquare_elasticsearch -p 9200:9200 -p 9300:9300 elasticsearch
对应 IP:9200 ---- 反馈下边 json 数据,表示启动成功
2. 启动 elasticsearch-head 镜像
docker run -d -p 9100:9100 elasticsearch-head
对应 IP:9100 ---- 得到下边页面,即启动成功
3. 解决跨域问题
进入 elasticsearch-head 页面,出现灰色未连接状态 , 即出现跨域问题
1. 根据 docker ps 得到 elasticsearch 的 CONTAINER ID
2. docker exec -it elasticsearch 的 CONTAINER ID /bin/bash 进入容器内
3. cd ./config
4. 修改 elasticsearch.yml 文件
echo "
http.cors.enabled: true
http.cors.allow-origin: ''*''" >> elasticsearch.yml
4. 重启 elasticsearch
docker restart elasticsearch的CONTAINER ID
重新进入 IP:9100 进入 elasticsearch-head, 出现绿色标注,配置成功 !
5. ik 分词器的安装
将在 ik 所在的文件夹下,拷贝到 /usr/share/elasticsearch/plugins --- 注意: elasticsearch 的版本号必须与 ik 分词器的版本号一致
docker cp ik elasticsearch的CONTAINER ID:/usr/share/elasticsearch/plugins
重启elasticsearch
docker restart elasticsearch
未添加ik分词器:http://IP:9200/_analyze?analyzer=chinese&pretty=true&text=我爱中国
添加ik分词器后:http://IP:9200/_analyze?analyzer=ik_smart&pretty=true&text=我爱中国
Docker部署ElasticSearch和ElasticSearch-Head
Docker部署ElasticSearch和ElasticSearch-Head
本篇主要讲解使用Docker如何部署ElasticSearch:6.8.4 版本,讲解了从Docker拉取到最终运行ElasticSearch 以及 安装 ElasticSearch-Head 用来管理ElasticSearch相关信息的一个小工具,本博客系统首页的搜索正是使用了ElasticSearch来实现的,由于ElasticSearch 更新太快 以至于SpringData-ElasticSearch都跟不上 Es的更新 我也是一开始下载8.x的版本 导致SpringData-ElasticSearch 报错 最终我选择了6.8.4 在此记录一下
1.Docker部署ElasticSearch:6.8.4版本
1.1 拉取镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.8.4
1.2 运行容器
ElasticSearch的默认端口是9200,我们把宿主环境9200端口映射到Docker容器中的9200端口,就可以访问到Docker容器中的ElasticSearch服务了,同时我们把这个容器命名为es。
docker run -d --name es -p 9200:9200 -p 9300:9300
-e "discovery.type=single-node"
-e ES_JAVA_OPTS="-Xms=256m -Xms=256m"
docker.elastic.co/elasticsearch/elasticsearch:6.8.4
说明:
-e discovery.type=single-node :表示单节点启动
-e ES_JAVA_OPTS="-Xms=256m -Xms=256m" :表示设置es启动的内存大小,这个真的要设置,不然后时候会内存不够,比如我自己的辣鸡服务器!
1.3 内存不足问题
centos下载完elasticsearch并修改完配置后运行docker命令:
发现没有启动成功,去除命令的-d后打印错误如下
Java HotSpot(TM) 64-Bit Server VM warning: INFO:
os::commit_memory(0x0000000085330000, 2060255232, 0) failed;
error=’Cannot allocate memory’ (errno=12)
经过一番查找发现这是由于elasticsearch6.0默认分配jvm空间大小为2g,内存不足以分配导致。
解决方法就是修改jvm空间分配
运行命令:
find /var/lib/docker/overlay/ -name jvm.options
查找jvm.options文件,找到后进入使用vi命令打开jvm.options如下:
将
-Xms2g
-Xmx2g
修改为
-Xms512m
-Xmx512m
保存退出即可。再次运行创建运行elasticsearch命令,成功启动。
2.Docker部署ElasticSearch-Heard
2.1 拉取镜像
docker pull mobz/elasticsearch-head:5
2.2 运行容器
docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5
2.3 启动容器
docker start elasticsearch-head
2.4 打开浏览器: http://IP:9100
发现连接不上,是因为有跨域问题,因为前后端分离开发的所以需要设置一下es
2.5 进入刚刚启动的 es 容器,容器name = es
docker exec -it es /bin/bash
2.6 修改elasticsearch.yml文件
vi config/elasticsearch.yml
添加
http.cors.enabled: true
http.cors.allow-origin: "*"
其实就是SpringBoot的yml文件 添加跨域支持
2.7 退出容器 并重启
exit
docker restart es
2.8 访问http://localhost:9100
总结:
本篇只是简单的讲解了如何用Docker安装ElasticSearch 并且会遇到的坑,包括内存不足,或者版本太高等问题,以及ElasticSearch-Heard的安装和跨域的配置 ,下一篇将讲解ElasticSearch如何安装中文分词器
个人博客网站 https://www.askajohnny.com 欢迎来访问!
本文由博客一文多发平台 OpenWrite 发布!
Docker部署ElasticSearch和ElasticSearch-Head的实现
本篇主要讲解使用Docker如何部署ElasticSearch:6.8.4 版本,讲解了从Docker拉取到最终运行ElasticSearch 以及 安装 ElasticSearch-Head 用来管理ElasticSearch相关信息的一个小工具,本博客系统首页的搜索正是使用了ElasticSearch来实现的,由于ElasticSearch 更新太快 以至于SpringData-ElasticSearch都跟不上 Es的更新 我也是一开始下载8.x的版本 导致SpringData-ElasticSearch 报错 最终我选择了6.8.4 在此记录一下
1.Docker部署ElasticSearch:6.8.4版本
1.1 拉取镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.8.4
1.2 运行容器
ElasticSearch的默认端口是9200,我们把宿主环境9200端口映射到Docker容器中的9200端口,就可以访问到Docker容器中的ElasticSearch服务了,同时我们把这个容器命名为es。
docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms=256m -Xms=256m" docker.elastic.co/elasticsearch/elasticsearch:6.8.4
说明:
-e discovery.type=single-node :表示单节点启动
-e ES_JAVA_OPTS="-Xms=256m -Xms=256m" :表示设置es启动的内存大小,这个真的要设置,不然后时候会内存不够,比如我自己的辣鸡服务器!
1.3 内存不足问题
centos下载完elasticsearch并修改完配置后运行docker命令:
发现没有启动成功,去除命令的-d后打印错误如下
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error=''Cannot allocate memory'' (errno=12)
经过一番查找发现这是由于elasticsearch6.0默认分配jvm空间大小为2g,内存不足以分配导致。
解决方法就是修改jvm空间分配
运行命令:
find /var/lib/docker/overlay/ -name jvm.options 查找jvm.options文件,找到后进入使用vi命令打开jvm.options如下: 将 -Xms2g -Xmx2g 修改为 -Xms512m -Xmx512m
保存退出即可。再次运行创建运行elasticsearch命令,成功启动。
2.Docker部署ElasticSearch-Heard
2.1 拉取镜像
docker pull mobz/elasticsearch-head:5
2.2 运行容器
docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5
2.3 启动容器
docker start elasticsearch-head
2.4 打开浏览器: http://IP:9100
发现连接不上,是因为有跨域问题,因为前后端分离开发的所以需要设置一下es
2.5 进入刚刚启动的 es 容器,容器name = es
docker exec -it es /bin/bash
2.6 修改elasticsearch.yml文件
vi config/elasticsearch.yml
添加
http.cors.enabled: true http.cors.allow-origin: "*"
其实就是SpringBoot的yml文件 添加跨域支持
2.7 退出容器 并重启
exit docker restart es
2.8 访问http://localhost:9100
总结:
本篇只是简单的讲解了如何用Docker安装ElasticSearch 并且会遇到的坑,包括内存不足,或者版本太高等问题,以及ElasticSearch-Heard的安装和跨域的配置 ,下一篇将讲解ElasticSearch如何安装中文分词器
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
- Docker安装ElasticSearch和Kibana的问题及处理方法
- docker安装Elasticsearch7.6集群并设置密码的方法步骤
- 一文搞定Docker安装ElasticSearch的过程
- 在Docker中安装Elasticsearch7.6.2的教程
- 教你使用docker安装elasticsearch和head插件的方法
Elastic search模糊匹配,精确匹配显示在前
如何解决Elastic search模糊匹配,精确匹配显示在前?
我最终没有使用模糊匹配来解决我的问题,而是使用了ngram。
/**
* Map - Create a new index with property mapping
*/
public function map()
{
$params[''index''] = self::INDEX;
$params[''body''][''settings''] = array(
''index'' => array(
''analysis'' => array(
''analyzer'' => array(
''product_analyzer'' => array(
''type'' => ''custom'',
''tokenizer'' => ''whitespace'',
''filter'' => array(''lowercase'', ''product_ngram''),
),
),
''filter'' => array(
''product_ngram'' => array(
''type'' => ''nGram'',
''min_gram'' => 3,
''max_gram'' => 5,
),
)
),
)
);
//all the beans
$mapping = array(
''_source'' => array(
''enabled'' => true
),
''properties'' => array(
''id'' => array(
''type'' => ''string'',
),
''name'' => array(
''type'' => ''string'',
''analyzer'' => ''product_analyzer'',
''boost'' => ''10'',
),
''brand'' => array(
''type'' => ''string'',
''analyzer'' => ''product_analyzer'',
''boost'' => ''5'',
),
''description'' => array(
''type'' => ''string'',
),
''barcodes'' => array(
''type'' => ''string''
),
),
);
$params[''body''][''mappings''][self::TYPE] = $mapping;
$this->_client->indices()->create($params);
}
public function search($query)
{
$return = $this->_client->search(
array(
''index'' => self::INDEX,
''type'' => self::TYPE,
''body'' => array(
''query'' => array(
''multi_match'' => array(
''query'' => $query,
''fields'' => array(''id'', ''name'', ''brand'', ''description'', ''barcodes''),
),
),
''size'' => ''5000'',
),
)
);
$productIds = array();
if (!empty($return[''hits''][''hits''])) {
foreach ($return[''hits''][''hits''] as $hit) {
$productIds[] = $hit[''_id''];
}
}
return $productIds;
}
结果正是我想要的。它根据搜索查询中包含的ngram部分构造匹配项。
解决方法
我想在查询上使用模糊匹配,但在结果顶部显示完全匹配。
我已经尝试了以下方法。
$return = $this->_client->search(
array(
''index'' => self::INDEX,''type'' => self::TYPE,''body'' => array(
''query'' => array(
''bool'' => array(
''must'' => array(
''multi_match'' => array(
''query'' => $query,''fields'' => array(''name'',''brand'',''description''),''boost'' => 10,),''fuzzy_like_this'' => array(
''like_text'' => $query,''fuzziness'' => 1,''size'' => ''5000'',)
);
由于格式错误的查询错误,此方法不起作用。
有任何想法吗?
我们今天的关于Elasticsearch模糊短语和elasticsearch模糊查询的分享已经告一段落,感谢您的关注,如果您想了解更多关于docker 部署 elasticsearch + elasticsearch-head + elasticsearch-head 跨域问题 + IK 分词器、Docker部署ElasticSearch和ElasticSearch-Head、Docker部署ElasticSearch和ElasticSearch-Head的实现、Elastic search模糊匹配,精确匹配显示在前的相关信息,请在本站查询。
本文标签: