slaveCoder
slaveCoder

Reputation: 537

Elastic Search Wildcard query with space failing 7.11

I am having my data indexed in elastic search in version 7.11. This is my mapping i got when i directly added documents to my index.

{"properties":{"name":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}

I havent added the keyword part but no idea where it came from. I am running a wild card query on the same. But unable to get data for keywords with spaces.

{
    
"query": {
    "bool":{
        "should":[
 {"wildcard": {"name":"*hello world*"}}
 
 ]
}
}

}

Have seen many answers related to not_analyzed . And i have tried updating {"index":"true"} in mapping but with no help. How to make the wild card search work in this version of elastic search

Tried adding the wildcard field

PUT http://localhost:9001/indexname/_mapping
{
  "properties": {
    "name": {
    "type" :"wildcard"
  }
  }
}

And got following response

{
"error": {
    "root_cause": [
        {
            "type": "illegal_argument_exception",
            "reason": "mapper [name] cannot be changed from type [text] to [wildcard]"
        }
    ],
    "type": "illegal_argument_exception",
    "reason": "mapper [name] cannot be changed from type [text] to [wildcard]"
},
"status": 400

}

Adding a sample document to match

{
            "_index": "accelerators",
            "_type": "_doc",
            "_id": "602ec047a70f7f30bcf75dec",
            "_score": 1.0,
            "_source": {
                "acc_id": "602ec047a70f7f30bcf75dec",
                "name": "hello world example",
                "type": "Accelerator",
                "description": "khdkhfk ldsjl klsdkl",
                "teamMembers": [
                    {
                        "userId": "[email protected]",
                        "name": "Karthik Ganesh R",
                        "shortName": "KR",
                        "isOwner": true
                    },
                    {
                        "userId": "[email protected]",
                        "name": "Anand Sajan",
                        "shortName": "AS",
                        "isOwner": false
                    }
                    
                ],
                "sectorObj": [
                    {
                        "item_id": 14,
                        "item_text": "Cross-sector"
                    }
                ],
                "geographyObj": [
                    {
                        "item_id": 4,
                        "item_text": "Global"
                    }
                ],
                "technologyObj": [
                    {
                        "item_id": 1,
                        "item_text": "Artificial Intelligence"
                    }
                ],
                "themeColor": 1,
                "mainImage": "assets/images/Graphics/Asset 35.svg",
                "features": [
                    {
                        "name": "Ideation",
                        "icon": "Asset 1007.svg"
                    },
                    {
                        "name": "Innovation",
                        "icon": "Asset 1044.svg"
                    },
                    {
                        "name": "Strategy",
                        "icon": "Asset 1129.svg"
                    },
                    {
                        "name": "Intuitive",
                        "icon": "Asset 964.svg"
                    },
                    
                    
                ],
                "logo": {
                    "actualFileName": "",
                    "fileExtension": "",
                    "fileName": "",
                    "fileSize": 0,
                    "fileUrl": ""
                },
                "customLogo": {
                    "logoColor": "#B9241C",
                    "logoText": "EC",
                    "logoTextColor": "#F6F6FA"
                },
                
                
                "collaborators": [
                    {
                        "userId": "[email protected]",
                        "name": "muhammed Arif P T",
                        "shortName": "MA"
                    },
                    {
                        "userId": "[email protected]",
                        "name": "Anand Sajan",
                        "shortName": "AS"
                    }
                    
                ],
                "created_date": "2021-02-18T19:30:15.238000Z",
                "modified_date": "2021-03-11T11:45:49.583000Z"
            }
        }

Upvotes: 0

Views: 402

Answers (1)

Val
Val

Reputation: 217314

You cannot modify a field mapping once created. However, you can create another sub-field of type wildcard, like this:

PUT http://localhost:9001/indexname/_mapping
{
  "properties": {
    "name": {
      "type": "text",
      "fields": {
        "wildcard": {
          "type" :"wildcard"
        },
        "keyword": {
          "type" :"keyword",
          "ignore_above":256
        }
      }
    }
  }
}

When the mapping is updated, you need to reindex your data so that the new field gets indexed, like this:

POST http://localhost:9001/indexname/_update_by_query

And then when this finishes, you'll be able to query on this new field like this:

{
  "query": {
    "bool": {
      "should": [
        {
          "wildcard": {
            "name.wildcard": "*hello world*"
          }
        }
      ]
    }
  }
}

Upvotes: 1

Related Questions