弹性搜索boolquery仍显示结果

时间:2018-05-17 07:18:27

标签: elasticsearch boolean kibana

我正在尝试在弹性搜索中使用查询,其中忽略所有英语(“taal”:“engels”)书籍。 我以为我应该使用bool查询和must_not,条件为“taal”:查询中的“恩格斯”。

GET books/_search
{
  "query": { 
    "bool": { 
      "must_not" : {
        "term" : { "taal" : "Engels" }
      }
    }
  }
}

但是,在Kibana中运行此查询时,它仍会显示带有language = english的结果。

{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 501,
    "max_score": 1,
    "hits": [
      {
        "_index": "producten4",
        "_type": "boek",
        "_id": "9780582401815",
        "_score": 1,
        "_source": {
          "isbn": "9780582401815",
          "hoofdtitel": "Forrest Gump",
          "taal": "Engels",
        }
      },
      ETCETERA....
    ]
  }
}

田野印章的映射:

"taal": {
  "type": "text",
  "fields": {
    "keyword": {
      "type": "keyword",
      "ignore_above": 256
    },
    "raw": {
      "type": "keyword"
    },
    "taal": {
      "type": "text"
    }
  }
}

2 个答案:

答案 0 :(得分:0)

尝试使用"匹配"而不是" term"?

答案 1 :(得分:0)

我通过将.raw添加到fieldname:

来修复它
bool: {
    must_not: [
      {
        term: {
          'taal.raw': 'Engels',
        }
      },
      {
        term: {
          'taal.raw': 'Nederlands',
        }
      }]
    }