悟空,拿我的打狗棒来

KIbana Discover 面板简单查询框为什么不支持medcl大神的中文分词

Kibana | 作者 ilangge | 发布于2016年12月08日 | 阅读数:7070

1、有个查询如下,在Kibana 的 DevTools中进行脚本查询,是支持medcl中文分词插件的:
GET article/_search
{
"query": {
"bool": {
"must": [
{
"wildcard": {
"contents.keyword": "*测试*"
}
}
]
}
}
}
出来的结果匹配“测试”这个词。
2、但是,在Discover面板的查询输入框输入:
contents.keyword:*测试*
得到的是无分词插件的结果,比如匹配到的是“测定”,“评测”,“测量”等包含第一个单字的结果。
 
每次都手写 完整的查询语句很繁琐,kibana这么简单易用、功能强大的querystring输入框偏偏不支持中文分词插件。
 
请问如何设置能让kibana的简单查询也能支持中文分词?
已邀请:

ilangge

赞同来自:

补充:
尝试了如下的querystring,可以在查询模式下执行成功:
{
"query": {
"bool": {
"must": [
{
"query_string": {
"default_field": "_all",
"query": "contents:殡葬"
}
},
{
"query_string": {
"default_field": "_all",
"query": "contents:营业税"
}
}
]
}
},
}

"query": "contents:营业税"  不能写成 "query": "contents:*营业税*",加了*号反而查询无结果。
 
环境为es5.0 rtf,就是medlc 大大 自己维护的那个rtf集成包,集成了ik中文分词插件。
 
没人回答的话,准备自己在chrome中获取post过去的语句了,看差异在哪里。为啥一个有分词一个没有分词。 
 
 

zaqweb

赞同来自:

Discover里面也是直接写 contents.keyword:测试 吧, 手边没环境,明天试试~

ilangge

赞同来自:

通过chrome开发工具抓到了提交的post语句,原因找到了。问题出在一个日期字段的聚合上,并不是query-string 的问题。
抓到的语句:
GET article/faq/_search
{
"index": [
"article"
],
"ignore_unavailable": true,
"preference": 1481203047034
}
{
"query": {
"bool": {
"must": [
{
"query_string": {
"analyze_wildcard": true,
"query": "contents:营业税"
}
},
{}
],
"must_not": []
}
},
"highlight": {
"pre_tags": [
"@kibana-highlighted-field@"
],
"post_tags": [
"@/kibana-highlighted-field@"
],
"fields": {
"*": {}
},
"require_field_match": false,
"fragment_size": 2147483647
},
"size": 500,
"sort": [
{
"_score": {
"order": "desc"
}
}
],
"aggs": {
"2": {
"date_histogram": {
"field": "rq",
"interval": "30s",
"time_zone": "Asia/Shanghai",
"min_doc_count": 1
}
}
},
"stored_fields": [
"*"
]
}
生成的语句存在几个问题导致查询异常:
1、强制在一个日期字段rq上做聚合,这个字段可能有空置,或者不是标准的日期类型,可能是个string类型,聚合chu出错,去掉日期字段相关操作,就正常了;
 "aggs": {
"2": {
"date_histogram": {
"field": "rq",
"interval": "30s",
"time_zone": "Asia/Shanghai",
"min_doc_count": 1
}
}
},

2、多余的:
{
"index": [
"article"
],
"ignore_unavailable": true,
"preference": 1481203047034
}
多了这个东西,整个json语句都是不对的。
 
3、精简后成如下语句:
GET article/faq/_search
{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "contents:营业税"
}
}
]
}
}
}
一切正常了。
 
 
方便的输入框背后是加了很多隐含条件,加了料,对于用不可见,导致了不可预料的后果。
 
如何规避这个问题,我暂时没想到。先试试添加一个规范的时间戳字段再说。毕竟Kibana专业做日志分析,时间zhi字段是基础。

要回复问题请先登录注册