A simple normalizer called lowercase ships with elasticsearch and can be used.
Create Elasticsearch Index
PUT product-index { "settings": { "analysis": { "normalizer": { "lowercaseNormalizer": { "type": "custom", "filter": ["lowercase", "asciifolding"] } } } }, "mappings": { "properties": { "ProductName": { "type": "keyword", "normalizer": "lowercaseNormalizer" }, "ProductCode": { "type": "keyword", "normalizer": "lowercaseNormalizer" }, "ProductDescription": { "type": "text" }, "ProductFamily": { "type": "keyword", "normalizer": "lowercaseNormalizer" }, "Color": { "type": "keyword" } } } }
Adding sample data/records
#Add first Document in elasticsearch PUT /product-index/_doc/1 { "ProductName": "CBC Anti Virus", "ProductCode": "Network", "ProductDescription": "APAC", "ProductFamily": "Sales Cloud", "Color": "Silver" } PUT /product-index/_doc/2 { "ProductName": "CBC Esoteric", "ProductDescription": "CBC Panel - 1", "ProductFamily": "Hardware", "Color": "BLUE" } PUT /product-index/_doc/3 { "ProductName": "CBC Oncology", "ProductCode": "CBC Health", "ProductFamily": "Software" } PUT /product-index/_doc/4 { "ProductName": "CBC Panel", "ProductCode": "Secure Wifi", "ProductDescription": "Only One Charge Type" } PUT /product-index/_doc/5 { "ProductName": "CBC Panel (Invitro)", "ProductCode": "Secure Wifi", "ProductDescription": "CBC Panel", "ProductFamily": "Hardware", "Color": "GREEN" } PUT /product-index/_doc/6 { "ProductName": "CBC Panel - Beijing", "ProductCode": "CBC Panel", "ProductDescription": "Only One Charge Type", "ProductFamily": "Software", "Color": "BLUE" } PUT /product-index/_doc/7 { "ProductName": "Esoteric", "ProductCode": "CBC", "ProductFamily": "Marketing Cloud", "Color": "WHITE" } PUT /product-index/_doc/8 { "ProductName": "Oncology", "ProductCode": "Network", "ProductDescription": "CBC", "ProductFamily": "Sales Cloud", "Color": "WHITE" }
View data/regcords
GET /product-index/_search
Search case-insensitive records
#Try 1 GET /product-index/_search { "query": { "match": { "ProductFamily" : "hArdware"} } } #Try 2 GET /product-index/_search { "query" : { "query_string" : { "query" : "*bei*", "fields" : ["ProductName"] } } } #Try 3 GET /product-index/_search { "query": { "query_string": { "query": "*Secure* OR *panel*", "default_field": "ProductCode" } } } #Try 4 GET /product-index/_search { "query" : { "query_string" : { "query" : "*cHarge*", "fields" : ["ProductDescription"] } } }
Note
- Text fields are analyzed.
- For keyword fields we need to add custom elasticsearch setting for analysis.
Reference
- run elasticsearch locally run elasticsearch locally
- Documentation: Elasticsearch normalizer
No comments:
Post a Comment