ashishsony
ashishsony

Reputation: 2587

query to find all docs that match with exact terms with all the fields in the query

I have a simple doc structure as follows.

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

I need to query elastic ,that matches all fields exactly

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

The matching should happen without any kind of elastic 'analysis' on keywords, so that "/tmp/path1" is matched as a full term.

I tried to use a custom mapping: with

"index" : false

which does not work.

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
            }
          }
        }
      }
    }
  }
}

I am using elastic7.0 and few posts suggesting a custom mapping with

"index" : "not_analysed"

does not get accepted as a valid mapping in elastic 7.0

Any suggestions?

Upvotes: 0

Views: 50

Answers (1)

Ishara Dayarathna
Ishara Dayarathna

Reputation: 3601

If you want to match exact terms, try this query:

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

Upvotes: 1

Related Questions