запрос, чтобы найти все документы, которые соответствуют точным условиям со всеми полями в запросе - PullRequest
0 голосов
/ 28 января 2020

У меня есть простая структура do c следующим образом.

{
    "did" : "1",
    "uid" : "user1",
    "mid" : "pc-linux1",
    "path" : "/tmp/path1" 
}

Мне нужно запросить elasti c, который точно соответствует всем полям

GET index2/_search
{
  "query": {
     "bool":{
      "must": [
        {
          "term" : { "uid" : "user1"}
        },
        {
          "term" : { "mid" : "pc-linux1"}
        },
        {
          "term" : { "did" : "1"}
        },
        {
          "term" : { "path" : "/tmp/path1"}
        }
      ]
    }
  }
}

Соответствие должно произойдет без какого-либо elasti c 'анализа' для ключевых слов, так что "/ tmp / path1" сопоставляется как полный термин.

Я попытался использовать пользовательское сопоставление: с

"index": false

, который не работает.

PUT /index2?include_type_name=true
{
    "mappings" : {
      "_doc": {
      "properties" : {
        "did" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "index" : false,
              "ignore_above" : 256
            }
          }
        },
        "mid" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "index" : false,
              "ignore_above" : 256
            }
          }
        },
        "path" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "index" : false,
              "ignore_above" : 256
            }
          }
        },
        "uid" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "index" : false,
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

Я используюastic7.0 и несколько постов, предлагающих пользовательское сопоставление с

"index": "not_analysed"

не принимается в качестве действительного сопоставления в elasti c 7.0

Есть предложения?

1 Ответ

1 голос
/ 28 января 2020

Если вы хотите соответствовать точным условиям, попробуйте этот запрос:

GET index2/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "uid": "user1"
          }
        },
        {
          "match": {
            "mid": "pc-linux1"
          }
        },
        {
          "match": {
            "did": "1"
          }
        },
        {
          "match": {
            "path": "/tmp/path1"
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...