在这篇文章中,我们将为您详细介绍ElasticSearch:突出显示词组查询中的每个单词的内容,并且讨论关于elasticsearch常用查询的相关问题。此外,我们还会涉及一些关于curl–elast
在这篇文章中,我们将为您详细介绍ElasticSearch:突出显示词组查询中的每个单词的内容,并且讨论关于elasticsearch常用查询的相关问题。此外,我们还会涉及一些关于curl – elasticsearch中的一个查询中的多个通配符、Elasticsearch CentOS6.5下安装ElasticSearch6.2.4+elasticsearch-head+Kibana、Elasticsearch 对多值字段中的每个单独值进行匹配查询,没有嵌套、Elasticsearch“开始于”短语中的第一个单词的知识,以帮助您更全面地了解这个主题。
本文目录一览:- ElasticSearch:突出显示词组查询中的每个单词(elasticsearch常用查询)
- curl – elasticsearch中的一个查询中的多个通配符
- Elasticsearch CentOS6.5下安装ElasticSearch6.2.4+elasticsearch-head+Kibana
- Elasticsearch 对多值字段中的每个单独值进行匹配查询,没有嵌套
- Elasticsearch“开始于”短语中的第一个单词
ElasticSearch:突出显示词组查询中的每个单词(elasticsearch常用查询)
如何获得Elastic Search仅突出显示导致文档退回的单词?
我有以下索引
{ "mappings": { "document": { "properties": { "content": { "type": "string", "fields": { "english": { "type": "string", "analyzer": "english" } } } } } }}
假设我已建立索引:
核能是利用核反应释放核能[5]来产生热量,然后最频繁地将其用于汽轮机中以在核电站中发电。该术语包括核裂变,核衰变和核聚变。目前,周期表the系元素的元素的核裂变在人类直接服务中产生了绝大多数核能,其核衰变过程主要以地热能和放射性同位素热电发生器的形式出现在利基用途中。弥补其余的。
并搜索“核元素”〜2
我只希望突出显示“元素的核裂变”或“元素的核裂变”的一部分,但是现在强调每次出现核。
这是我的查询,如果有帮助:
{ "fields": [ ], "query": { "query_string": { "query": "\"nuclear elements\"~2", "fields": [ "content.english" ] } }, "highlight": { "pre_tags": [ "<emh''>" ], "post_tags": [ "</em>" ], "fragment_size": 500, "number_of_fragments": 20, "fields": { "content.english": {} } }}
答案1
小编典典ES
2.1中有一个突出的错误,该错误是由于此更改引起的。此请求请求已解决此问题。
根据ES开发人员的说法
这是我在#13239中引入的一个错误,当时我认为差异是由于Lucene的变化引起的:当跨度提取成功后,也会调用extractUnknownQuery,因此,如果尚未跨度提取,我们应该只使用Weight.extractTerms。
它可以在2.0之前的较旧版本中使用,并且可以在将来的版本中按预期工作。
curl – elasticsearch中的一个查询中的多个通配符
curl localhost:9200/tweet/posts/_search -d '{ "query": { "and": [ { "wildcard": { "_all": "*pet*" } },{ "wildcard": { "_all": "*rom*" } } ] } }'
这给了我一个解析异常.我想用AND条件运行类似(%test%)类型的MySQL查询.在弹性搜索中还有其他好的方法吗?
解决方法
{ "query": { "bool": { "must": [ { "wildcard": { "_all": { "value": "*pet*" } } },{ "wildcard": { "_all": { "value": "*rom*" } } } ] } } }
Elasticsearch CentOS6.5下安装ElasticSearch6.2.4+elasticsearch-head+Kibana
CentOS6.5下安装ElasticSearch6.2.4
(1)配置JDK环境
配置环境变量
export JAVA_HOME="/opt/jdk1.8.0_144"
export PATH="$JAVA_HOME/bin:$PATH"
export CLASSPATH=".:$JAVA_HOME/lib"
(2)安装ElasticSearch6.2.4
下载地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-2-4
启动报错:
解决方式:
bin/elasticsearch -Des.insecure.allow.root=true
或者修改bin/elasticsearch,加上ES_JAVA_OPTS属性:
ES_JAVA_OPTS="-Des.insecure.allow.root=true"
再次启动:
这是出于系统安全考虑设置的条件。由于ElasticSearch可以接收用户输入的脚本并且执行,为了系统安全考 虑,建议创建一个单独的用户用来运行ElasticSearch。
如果没有普通用户就要创建一个普通用户组和普通用户,下面介绍一下怎么创建用户组和普通用户
创建用户组和用户:
groupadd esgroup
useradd esuser -g esgroup -p espassword
更改elasticsearch文件夹及内部文件的所属用户及组:
cd /opt
chown -R esuser:esgroup elasticsearch-6.2.4
切换用户并运行:
su esuser
./bin/elasticsearch
再次启动显示已杀死:
需要调整JVM的内存大小:
vi bin/elasticsearch
ES_JAVA_OPTS="-Xms512m -Xmx512m"
再次启动:启动成功
如果显示如下类似信息:
[INFO ][o.e.c.r.a.DiskThresholdMonitor] [ZAds5FP] low disk watermark [85%] exceeded on [ZAds5FPeTY-ZUKjXd7HJKA][ZAds5FP][/opt/elasticsearch-6.2.4/data/nodes/0] free: 1.2gb[14.2%], replicas will not be assigned to this node
需要清理磁盘空间。
后台运行:./bin/elasticsearch -d
测试连接:curl 127.0.0.1:9200
会看到一下JSON数据:
[root@localhost ~]# curl 127.0.0.1:9200
{
"name" : "rBrMTNx",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "-noR5DxFRsyvAFvAzxl07g",
"version" : {
"number" : "5.1.1",
"build_hash" : "5395e21",
"build_date" : "2016-12-06T12:36:15.409Z",
"build_snapshot" : false,
"lucene_version" : "6.3.0"
},
"tagline" : "You Know, for Search"
}
实现远程访问:
需要对config/elasticsearch.yml进行 配置:
network.host: hadoop-001
再次启动报错:Failed to load settings from [elasticsearch.yml]
这个错就是参数的冒号前后没有加空格,加了之后就好,我找了好久这个问题;
后来在一个外国网站找到了这句话.
Exception in thread "main" SettingsException[Failed to load settings from [elasticsearch.yml]]; nested: ElasticsearchParseException[malformed, expected end of settings but encountered additional content starting at line number: [3], column number: [1]]; nested: ParserException[expected ''<document start>'', but found BlockMappingStart
in ''reader'', line 3, column 1:
node.rack : r1
^
];
Likely root cause: expected ''<document start>'', but found BlockMappingStart
in ''reader'', line 3, column 1:
node.rack : r1
这个是行的开头没有加空格,fuck!
Exception in thread "main" SettingsException[Failed to load settings from [elasticsearch.yml]]; nested: ScannerException[while scanning a simple key
in ''reader'', line 11, column 2:
discovery.zen.ping.unicast.hosts ...
^
参数冒号后加空格,或者是数组中间加空格
例如:
# discovery.zen.minimum_master_nodes: 3
再次启动
还是报错
max file descriptors [4096] for elasticsearch process is too low
处理第一个错误:
vim /etc/security/limits.conf //文件最后加入
esuser soft nofile 65536
esuser hard nofile 65536
esuser soft nproc 4096
esuser hard nproc 4096
处理第二个错误:
进入limits.d目录下修改配置文件。
vim /etc/security/limits.d/20-nproc.conf
修改为 esuser soft nproc 4096
注意重新登录生效!!!!!!!!
处理第三个错误:
vim /etc/sysctl.conf
vm.max_map_count=655360
执行以下命令生效:
sysctl -p
关闭防火墙:systemctl stop firewalld.service
启动又又又报错
system call filters failed to install; check the logs and fix your configuration or disable sys
直接在
config/elasticsearch.yml 末尾加上一句
bootstrap.system_call_filter: false
再次启动成功!
安装Head插件
Head是elasticsearch的集群管理工具,可以用于数据的浏览和查询
(1)elasticsearch-head是一款开源软件,被托管在github上面,所以如果我们要使用它,必须先安装git,通过git获取elasticsearch-head
(2)运行elasticsearch-head会用到grunt,而grunt需要npm包管理器,所以nodejs是必须要安装的
nodejs和npm安装:
http://blog.java1234.com/blog/articles/354.html
git安装
yum install -y git
(3)elasticsearch5.0之后,elasticsearch-head不做为插件放在其plugins目录下了。
使用git拷贝elasticsearch-head到本地
cd ~
git clone git://github.com/mobz/elasticsearch-head.git
(4)安装elasticsearch-head依赖包
[root@localhost local]# npm install -g grunt-cli
[root@localhost _site]# cd /usr/local/elasticsearch-head/
[root@localhost elasticsearch-head]# cnpm install
(5)修改Gruntfile.js
[root@localhost _site]# cd /usr/local/elasticsearch-head/
[root@localhost elasticsearch-head]# vi Gruntfile.js
在connect-->server-->options下面添加:hostname:’*’,允许所有IP可以访问
(6)修改elasticsearch-head默认连接地址
[root@localhost elasticsearch-head]# cd /usr/local/elasticsearch-head/_site/
[root@localhost _site]# vi app.js
将this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";中的localhost修改成你es的服务器地址
(7)配置elasticsearch允许跨域访问
打开elasticsearch的配置文件elasticsearch.yml,在文件末尾追加下面两行代码即可:
http.cors.enabled: true
http.cors.allow-origin: "*"
(8)打开9100端口
[root@localhost elasticsearch-head]# firewall-cmd --zone=public --add-port=9100/tcp --permanent
重启防火墙
[root@localhost elasticsearch-head]# firewall-cmd --reload
(9)启动elasticsearch
(10)启动elasticsearch-head
[root@localhost _site]# cd ~/elasticsearch-head/
[root@localhost elasticsearch-head]# node_modules/grunt/bin/grunt server 或者 npm run start
(11)访问elasticsearch-head
关闭防火墙:systemctl stop firewalld.service
浏览器输入网址:hadoop-001:9100/
安装Kibana
Kibana是一个针对Elasticsearch的开源分析及可视化平台,使用Kibana可以查询、查看并与存储在ES索引的数据进行交互操作,使用Kibana能执行高级的数据分析,并能以图表、表格和地图的形式查看数据
(1)下载Kibana
https://www.elastic.co/downloads/kibana
(2)把下载好的压缩包拷贝到/soft目录下
(3)解压缩,并把解压后的目录移动到/user/local/kibana
(4)编辑kibana配置文件
[root@localhost /]# vi /usr/local/kibana/config/kibana.yml
将server.host,elasticsearch.url修改成所在服务器的ip地址
server.port: 5601 //监听端口
server.host: "hadoo-001" //监听IP地址,建议内网ip
elasticsearch.url: "http:/hadoo-001" //elasticsearch连接kibana的URL,也可以填写192.168.137.188,因为它们是一个集群
(5)开启5601端口
Kibana的默认端口是5601
开启防火墙:systemctl start firewalld.service
开启5601端口:firewall-cmd --permanent --zone=public --add-port=5601/tcp
重启防火墙:firewall-cmd –reload
(6)启动Kibana
[root@localhost /]# /usr/local/kibana/bin/kibana
浏览器访问:http://192.168.137.188:5601
安装中文分词器
一.离线安装
(1)下载中文分词器
https://github.com/medcl/elasticsearch-analysis-ik
下载elasticsearch-analysis-ik-master.zip
(2)解压elasticsearch-analysis-ik-master.zip
unzip elasticsearch-analysis-ik-master.zip
(3)进入elasticsearch-analysis-ik-master,编译源码
mvn clean install -Dmaven.test.skip=true
(4)在es的plugins文件夹下创建目录ik
(5)将编译后生成的elasticsearch-analysis-ik-版本.zip移动到ik下,并解压
(6)解压后的内容移动到ik目录下
二.在线安装
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.2.4/elasticsearch-analysis-ik-6.2.4.zip
Elasticsearch 对多值字段中的每个单独值进行匹配查询,没有嵌套
如果你想找到相距很远但仍然在同一个数组索引上的单词,那么你可以使用position_increment_gap。
创建映射时,将字段的 position_increment_gap 设置为 100。Elasticsearch 将自动索引每个位置的数组数据,下一个索引处的数据的位置为 +100。 然后用 slop 99 写一个 match_phrase 查询。
PUT match_test
{
"mappings": {
"properties": {
"companies": {
"type": "text","position_increment_gap": 100
}
}
}
}
GET match_test/_search
{
"query": {
"match_phrase": {
"companies": {
"query": "japan movies","slop":99
}
}
}
}
在此处阅读更多相关信息https://www.elastic.co/guide/en/elasticsearch/reference/current/position-increment-gap.html
Elasticsearch“开始于”短语中的第一个单词
我尝试使用Elasticsearch为我的内容实现A-Z导航。我需要的是显示所有以a,b,c等开头的结果。
我试过了:
"query": { "match_phrase_prefix" : { "title" : { "query" : "a" } } }
上面提到的查询还显示结果,其中字符串中的单词以a开头。例:
“ title”:“ Apfelpfannkuchen”,
“ title”:“ Affogato”,
“ title”:“ Kalbsschnitzel a n A ceto Balsamico”,
我只想显示第一个单词以a开头的短语。
这是我使用的映射:
$params = array( ''index'' => ''my_index'', ''body'' => array( ''settings'' => array( ''number_of_shards'' => 1, ''index'' => array( ''analysis'' => array( ''filter'' => array( ''nGram_filter'' => array( ''type'' => ''nGram'', ''min_gram'' => 2, ''max_gram'' => 20, ''token_chars'' => array(''letter'', ''digit'', ''punctuation'', ''symbol'') ) ), ''analyzer'' => array( ''nGram_analyzer'' => array( ''type'' => ''custom'', ''tokenizer'' => ''whitespace'', ''filter'' => array(''lowercase'', ''asciifolding'', ''nGram_filter'') ), ''whitespace_analyzer'' => array( ''type'' => ''custom'', ''tokenizer'' => ''whitespace'', ''filter'' => array(''lowercase'', ''asciifolding'') ), ''analyzer_startswith'' => array( ''tokenizer'' => ''keyword'', ''filter'' => ''lowercase'' ) ) ) ) ), ''mappings'' => array( ''tags'' => array( ''_all'' => array( ''type'' => ''string'', ''index_analyzer'' => ''nGram_analyzer'', ''search_analyzer'' => ''whitespace_analyzer'' ), ''properties'' => array() ), ''posts'' => array( ''_all'' => array( ''index_analyzer'' => ''nGram_analyzer'', ''search_analyzer'' => ''whitespace_analyzer'' ), ''properties'' => array( ''title'' => array( ''type'' => ''string'', ''index_analyzer'' => ''analyzer_startswith'', ''search_analyzer'' => ''analyzer_startswith'' ) ) ) ) ) );
答案1
小编典典如果您使用的是默认映射,那么它将不适用于您。
您需要在映射中使用关键字标记器和小写过滤器。
映射将是:
{ "settings": { "index": { "analysis": { "analyzer": { "analyzer_startswith": { "tokenizer": "keyword", "filter": "lowercase" } } } } }, "mappings": { "test_index": { "properties": { "title": { "search_analyzer": "analyzer_startswith", "index_analyzer": "analyzer_startswith", "type": "string" } } } }}
搜索查询test_index
:
{ "query": { "match_phrase_prefix": { "title": { "query": "a" } } }}
它将返回所有以a
关于ElasticSearch:突出显示词组查询中的每个单词和elasticsearch常用查询的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于curl – elasticsearch中的一个查询中的多个通配符、Elasticsearch CentOS6.5下安装ElasticSearch6.2.4+elasticsearch-head+Kibana、Elasticsearch 对多值字段中的每个单独值进行匹配查询,没有嵌套、Elasticsearch“开始于”短语中的第一个单词的相关信息,请在本站寻找。
本文标签: