0
如何將單詞映射到Elasticsearch中的另一個單詞?這是假設我有以下數據文件如何在elasticsearch中將一個單詞映射到另一個單詞?
{
"carName" : "Porche"
"review": " this car is so awesome"
}
現在,當我搜索好/奇妙等,它應該映射到「真棒」。 有沒有什麼辦法可以在elasticsearch中做到這一點?
如何將單詞映射到Elasticsearch中的另一個單詞?這是假設我有以下數據文件如何在elasticsearch中將一個單詞映射到另一個單詞?
{
"carName" : "Porche"
"review": " this car is so awesome"
}
現在,當我搜索好/奇妙等,它應該映射到「真棒」。 有沒有什麼辦法可以在elasticsearch中做到這一點?
是的,您可以通過使用synonym token filter來實現此目的。
首先,您需要在索引中定義一個新的自定義分析器,並在映射中使用該分析器。
curl -XPUT localhost:9200/cars -d '{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"synonyms"
]
}
},
"filter": {
"synonyms": {
"type": "synonym",
"synonyms": [
"good, awesome, fantastic"
]
}
}
}
},
"mappings": {
"car": {
"properties": {
"carName": {
"type": "string"
},
"review": {
"type": "string",
"analyzer": "my_analyzer"
}
}
}
}
}'
,只要你想你可以添加儘可能多的同義詞,無論是在直接設置或者,你可以在設置中使用synonyms_path
屬性引用一個單獨的文件。
然後我們可以索引示例文檔上面:
curl -XPUT localhost:9200/cars/car/1 -d '{
"carName": "Porche",
"review": " this car is so awesome"
}'
這是怎麼發生的是,當synonyms
令牌過濾踢,它也將指數令牌good
與awesome
沿fantastic
,讓你也可以通過這些令牌來搜索和查找該文檔。具體而言,分析句子this car is so awesome
...
curl -XGET 'localhost:9200/cars/_analyze?analyzer=my_analyzer&pretty' -d 'this car is so awesome'
...會產生下列標記(見最後三個令牌)
{
"tokens" : [ {
"token" : "this",
"start_offset" : 0,
"end_offset" : 4,
"type" : "<ALPHANUM>",
"position" : 1
}, {
"token" : "car",
"start_offset" : 5,
"end_offset" : 8,
"type" : "<ALPHANUM>",
"position" : 2
}, {
"token" : "is",
"start_offset" : 9,
"end_offset" : 11,
"type" : "<ALPHANUM>",
"position" : 3
}, {
"token" : "so",
"start_offset" : 12,
"end_offset" : 14,
"type" : "<ALPHANUM>",
"position" : 4
}, {
"token" : "good",
"start_offset" : 15,
"end_offset" : 22,
"type" : "SYNONYM",
"position" : 5
}, {
"token" : "awesome",
"start_offset" : 15,
"end_offset" : 22,
"type" : "SYNONYM",
"position" : 5
}, {
"token" : "fantastic",
"start_offset" : 15,
"end_offset" : 22,
"type" : "SYNONYM",
"position" : 5
} ]
}
最後,你可以搜索這樣和文檔會檢索:
curl -XGET localhost:9200/cars/car/_search?q=review:good