Saya mencoba mengonfigurasi pencarian elastis dengan sinonim.
Ini adalah pengaturan saya:
"analysis": {
"analyzer": {
"category_synonym": {
"tokenizer": "whitespace",
"filter": [
"synonym_filter"
]
}
},
"filter": {
"synonym_filter": {
"type": "synonym",
"synonyms_path": "synonyms.txt"
}
}
}
Konfigurasi pemetaan:
"category": {
"properties": {
"name": {
"type":"string",
"search_analyzer" : "category_synonym",
"index_analyzer" : "standard",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
Dan daftar sinonim saya
film => video,
ooh => panels , poster,
commercial => advertisement,
print => magazine
Saya harus mengatakan bahwa saya menggunakan Elasticsearch Java API. Saya menggunakan QueryBuilders.queryStringQuery
karena ini adalah satu-satunya cara saya mengatur penganalisis untuk permintaan saya. Jadi, ketika saya membuat:
QueryBuilders.queryStringQuery("name:film").analyzer(analyzer)
Ini mengembalikan saya
[
{
"id": 71,
"name": "Pitch video",
"description": "... ",
"parent": null
},
{
"id": 25,
"name": "Video",
"description": "... ",
"parent": null
}
]
Itu sempurna bagi saya, tetapi ketika saya menelepon sesuatu seperti ini
QueryBuilders.queryStringQuery("name:vid").analyzer(analyzer)
Saya berharap itu akan mengembalikan objek yang sama, tetapi tidak ada apa-apa: []
Jadi, saya menambahkan tanda bintang ke queryStringQuery
:
QueryBuilders.queryStringQuery("name:vid*").analyzer(analyzer)
Bekerja dengan baik, tapi sekarang
QueryBuilders.queryStringQuery("name:film*").analyzer(analyzer)
kembalikan aku []
Jadi, bagaimana cara mengonfigurasi pencarian elastis saya sehingga akan mengembalikan objek yang sama ketika saya mencari video
, vid
, film
dan fil
?
Terima kasih sebelumnya!