我正在嘗試將搜索詞部分匹配到給定的模式以進行自動完成。我希望 customerNumber 和 AddressLine1 以及 Zip 匹配以 419 開頭的任何檔案(因此 4191 應該匹配客戶編號 41915678 和地址 4191 Board Street 和郵政編碼 41912)
"mappings": {
"companyName": {
"type": "text"
},
"customerNumber": {
"type": "long"
}
"address": {
"addressLine1": {
"type": "text"
},
"city": {
"type": "text"
},
"state": {
"type": "text"
},
"zip": {
"type": "text"
}
}
}
有人對查詢有一個巧妙的解決方案嗎?最終我需要使用 NEST 客戶端將此查詢轉換為 C#。
uj5u.com熱心網友回復:
一種簡單的方法是利用completion建議欄位型別。
基本上,您可以通過在映射中添加completion欄位來修改映射,例如
"suggest": {
"type": "completion"
},
然而,完成欄位的默認分析器(即simple分析器)不索引數字,我們需要創建我們的自定義分析器來正確地做到這一點:
PUT my-index
{
"settings": {
"analysis": {
"analyzer": {
"suggest_analyzer": { <--- custom analyzer
"type": "custom",
"tokenizer": "classic",
"filter": [
"lowercase"
]
}
}
}
},
"mappings": {
"properties": {
...,
"suggest": { <--- the new completion field with the right analyzer
"type": "completion",
"analyzer": "suggest_analyzer"
}
}
}
}
然后您只需要通過在建議欄位中添加您想要建議的所有值來填充索引,如下所示:
PUT my-index/_doc/1
{
"address": {
"addressLine1": "1234 Main Street",
"zip": "34526"
},
"customerNumber": "41915678",
"suggest": [
"1234 Main Street",
"34526",
"41915678"
]
}
PUT my-index/_doc/2
{
"address": {
"addressLine1": "4191 Board Street",
"zip": "45263"
},
"customerNumber": "45267742",
"suggest": [
"4191 Board Street",
"45263",
"45267742"
]
}
PUT my-index/_doc/3
{
"address": {
"addressLine1": "5662 4th Avenue",
"zip": "41912"
},
"customerNumber": "24442561",
"suggest": [
"5662 4th Avenue",
"41912",
"24442561"
]
}
然后,您可以419使用以下建議查詢進行搜索:
POST my-index/_search
{
"suggest": {
"customer-suggest": {
"prefix": "419",
"completion": {
"field": "suggest"
}
}
}
}
你會得到所有三個檔案,因為每個檔案都有一個匹配的欄位 419
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/391513.html
