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