你不会是程序猿吧?

span query 中 span_not 查询问题

Elasticsearch | 作者 f_on | 发布于2020年05月27日 | 阅读数:2011

1,title 字段类型
"TITLE": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
},
"fielddata": true
},

查询语句

{
"query": {
"span_not" : {
"include" : {
"span_term" :{ "TITLE" : "黑人" }
},
"exclude" : {
"span_near" : {
"clauses" : [
{ "span_term" :{ "TITLE" : "哪里" }},
{ "span_term" :{ "TITLE" : "广州" }}

],
"slop" : 1000,
"in_order" : false
}
}
}


},
"_source":{"include":["TITLE"]},
"size": 10,
"from": 0
}

查询结果
 
 
问题:为啥标红出的数据(包含哪里以及广州的数据)没有被过滤掉呢??
 
 
 
 
FCE5460F-DB3F-48a5-AA9D-8832AC7E3125.png
已邀请:

tacsklet - 公司有用到es

赞同来自:

会分词的,你换成
{ "span_term" :{ "TITLE" : "哪" }},
{ "span_term" :{ "TITLE" : "广" }}
就知道原因了。

tacsklet - 公司有用到es

赞同来自:

我最终试的结果是:
我试的结果是exclude里面必须包含include的字段,然后判断剩下的那个是不是也在这条数据里面。
如:
{
"query": {
"span_not": {
"include": {
"span_term": {
"spantest": "黑人"
}
},
"exclude": {
"span_near": {
"clauses": [
{
"span_term": {
"spantest": "广州"
}
},
{
"span_term": {
"spantest": "黑人"
}
}
],
"slop": 1000,
"in_order": false
}
}
}
},
"size": 10,
"from": 0
}
这样就查不到。
{
"query": {
"span_not": {
"include": {
"span_term": {
"spantest": "黑人"
}
},
"exclude": {
"span_near": {
"clauses": [
{
"span_term": {
"spantest": "北京"
}
},
{
"span_term": {
"spantest": "黑人"
}
}
],
"slop": 1000,
"in_order": false
}
}
}
},
"size": 10,
"from": 0
}
这样就可以查到。

要回复问题请先登录注册