Elasticsearch:将结果限制为具有完全匹配的文档

时间:2017-05-15 08:35:19

标签: elasticsearch elasticsearch-5

目前,我尝试使用以下查询来限制Elasticsearch(5.4)的结果:

{
  "query": {
    "bool": {
      "must": {
        "multi_match": {
          "query": "apache log Linux",
          "type": "most_fields",
          "fields": [
            "message",
            "type"
          ]
        }
      },
      "filter": {
        "term": {
          "client": "test"
        }
      }
    }
  }
}

这将返回包含"apache""log“或"linux"的每个文档。我想将结果限制为具有精确字段”client“的文档指定值,在这种情况下:"test"。但是,此查询将返回包含“test”的所有文档作为值。还将返回包含"client": "test client"的文档。 我希望限制是准确的,因此只应返回包含"client": "test"的文档,而不是"client": "test client"

在测试了大量不同的查询和大量搜索后,我找不到解决问题的方法。我错过了什么?

2 个答案:

答案 0 :(得分:1)

在索引上设置映射,指定您的client字段为keyword datatype

映射请求可能看起来像

PUT my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "client": {
          "type":  "keyword"
        }
      }
    }
  }
}

答案 1 :(得分:1)

只需使用keyword字段的client部分,因为这是5.x而且默认keyword已经存在:< / p>

  "filter": {
    "term": {
      "client.keyword": "test"
    }
  }