我使用弹性搜索将位置与弹性搜索索引匹配。
弹性搜索索引数据样本
{
"_index": "reference_2",
"_type": "geonames",
"_id": "AUn2LNJlZ8pWP0iSxZYS",
"_version": 1,
"_score": 1,
"_source": {
"geoNameId": "7509382",
"lat": "34.64274",
"longi": "64.51122",
"timeZoneId": "Asia/Kabul",
"countryCode": "AF",
"state": "Tamil nadu",
"timezone": "AFT",
"stateCode": "09",
"alterCityName": [
chennai
],
"cityName": "chennai",
"population": "0",
"countryName": "India"
},
"sort": [
1,
"geonames",
"reference_2"
]
}
用户可以将状态写为“tamilnadu”或tamil nadu,我希望程序或查询能够理解tamilnadu与tamil nadu相同。 任何人都可以帮助我实现这个目标
答案 0 :(得分:0)
最简单的方法是定义包含您要使用的所有同义词的同义词文件。提供特定的映射到您的字段以使用该特定的同义词文件。
例如,你的同义词文件将包含类似的内容,tamil nadu,tamilnadu,tn => tamilnadu
andhra pradesh,andra,andrhrapradesh,ap => andhrapradesh
将同义词文件的路径提供给自定义分析,并将其用于您的字段。
"filter": {
"custom_state": {
"type" : "synonym",
"synonyms_path" : "<path to synonym file>"
},
.....
"analyzer": {
"states": {
"type": "custom",
"filter": [ "lowercase", "custom_state"]
},
.......
"properties" : {
"STATE" : {"type" : "string", "analyzer": "states"},
........
使用单独的同义词文件的优点是您可以稍后扩展/包含更多值。